123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983 |
- Clear_scroll_Planes
- move.l Plane1,a0
- move.l buffered_Plane1,a1
- move.w #((BYTES_PER_ROW*SCROLL_HEIGHT*BACKPLANES)/4)-1,d0
- clear_memory_loop
- clr.l (a0)+
- clr.l (a1)+
- dbra d0,clear_memory_loop
- rts
-
- Selection_setup
- *bsr clear_scroll_planes
- *move.l Buffered_Plane1,d0
- *move.w d0,SELECTPLANE1LOW
- *swap d0
- *move.w d0,SELECTPLANE1HIGH
- *move.l Buffered_Plane2,d0
- *move.w d0,SELECTPLANE2LOW
- *swap d0
- *move.w d0,SELECTPLANE2HIGH
- move.l #Level_Select_Graphics,d0
- move.w d0,SELECTPLANE1LOW
- swap.w d0
- move.w d0,SELECTPLANE1HIGH
- move.l #Level_Select_Graphics+40*256,d0
- move.w d0,SELECTPLANE2LOW
- swap.w d0
- move.w d0,SELECTPLANE2HIGH
- move.l #Level_Select_Graphics+40*256*2,d0
- move.w d0,SELECTPLANE3LOW
- swap.w d0
- move.w d0,SELECTPLANE3HIGH
- move.l #Level_Select_Graphics+40*256*3,d0
- move.w d0,SELECTPLANE4LOW
- swap.w d0
- move.w d0,SELECTPLANE4HIGH
- move.l #blank_sprite,d0
-
- swap d0
-
- move.w d0,blank_sprites+2
- move.w d0,blank_sprites+10
- move.w d0,blank_sprites+18
- move.w d0,blank_sprites+26
- move.w d0,blank_sprites+34
- move.w d0,blank_sprites+42
- move.w d0,blank_sprites+50
- swap d0
-
- move.w d0,blank_sprites+6
- move.w d0,blank_sprites+14
- move.w d0,blank_sprites+22
- move.w d0,blank_sprites+30
- move.w d0,blank_sprites+38
- move.w d0,blank_sprites+46
- move.w d0,blank_sprites+54
- move.l #level_dpaint_cols,a2
- move.l #level_select_colours_high,a0
- move.l #level_select_colours_low,a1
- bsr set_colour_map
-
- move.l #level_select_copper_list,cop1lc(a6)
- clr.w copjmp1(a6)
- move.l #Player1_Selection_Boxes,a0
- move.l #Player1_Select_Struct,a1
- *bsr draw_player_box
- move.w #0,current_pass_count
- move.l buffered_plane1,a0
- add.l #70*BYTES_PER_ROW+2,a0
- move.l #password_entry_text,a5
- *jsr write_string
- move.l buffered_plane1,a0
- add.l #86*BYTES_PER_ROW+2,a0
- move.l #password_entry_text+psel,a5
- *jsr write_string
- move.l buffered_plane1,a0
- add.l #102*BYTES_PER_ROW+2,a0
- move.l #password_entry_text+psel*2,a5
- *jsr write_string
- move.l buffered_plane1,a0
- add.l #118*BYTES_PER_ROW+2,a0
- move.l #password_entry_text+psel*3,a5
- *jsr write_string
- rts
-
- Create_Password
- move.l #Password_Data,a1
- move.l #Password_Text,a5
- move.w #PASSWORD_BYTES-1,d7
- calc_password
- move.w #2-1,d6
- move.b (a1)+,d0
- dig_loop
- move.b d0,d1
- andi.b #$f,d1
- cmp.b #10,d1
- bge.s not_digit
- add.b #'0',d1
- bra.s digit_alright
- not_digit
- add.b #'A'-10,d1
- digit_alright
- move.b d1,(a5)+
- asr.w #4,d0
- dbra d6,dig_loop
-
-
- dbra d7,calc_password
- rts
-
-
- move_stage_player
- bsr rawreadjoy
- btst #P1_Fire,d0 ; ignore fire button
- beq.s no_enter_level
- move.w #-1,d0
- bra no_exit_selected
-
- no_enter_level
- btst #P1_Up,d0
- beq.s tryotherexits1
- move.w #north,d7
- bra.s check_path_of_exit
- tryotherexits1
- btst #P1_Right,d0
- beq.s tryotherexits2
- move.w #east,d7
- bra.s check_path_of_exit
- tryotherexits2
- btst #P1_down,d0
- beq.s tryotherexits3
- move.w #south,d7
- bra.s check_path_of_exit
- tryotherexits3
- btst #P1_Left,d0
- beq.s tryotherexits4
- move.w #west,d7
- bra.s check_path_of_exit
- tryotherexits4
- bra no_exit_selected
- check_path_of_exit
- move.w player_at_stage,d6
- subq.w #1,d6
- lsl.w #3,d6 ; *8 (4 possible exits per stage)
- add.w d6,d7 ; actual exit to test
- move.l #Stage_Exits,a1
- move.w (a1,d7.w),d0 ; get path to travel on
- tst.w d0
- beq.s no_exit_this_way
-
- ; now check path_flag
- move.l #Path_Flags,a1
- move.w d0,d6
- subq.w #1,d6 ; 1 less for bits
- move.w d6,d7
- asr.w #5,d6 ; divide by 32 (bits per longword)
- andi.w #%11111,d7 ; lower 5 bits 0-31 level
- move.w #31,d5 ; for the old swap round
- sub.w d7,d5 ; get right representation
-
- move.l (a1,d6.w*8),d7
- btst.l d5,d7 ; check path flag
- beq.s path_not_drawn_yet
-
- ; select stage to move to via path
- move.w player_at_stage,d5 ; 'from' stage
-
- move.l #Stage_Paths,a1
- move.w d0,d7
- sub.w #1,d7 ; less one for memory
- move.w (a1,d7.w*4),d6 ; get path from
- cmp.w player_at_stage,d6 ; are we at this number already
- bne.s ok_we_want_this_stage ; no ok moving back to it
-
- move.w 2(a1,d7.w*4),d6 ; else must be other stage
-
- ok_we_want_this_stage
- move.w d6,player_at_stage ; set new stage
- ; get walk from/to positions
- move.l #Stage_Paths,a2
- move.l #Stage_positions,a3
-
- subq.w #1,d5 ; they start at one you know
- subq.w #1,d6
-
- move.w (a3,d5.w*4),d0 ; get from x co-ord
- move.w 2(a3,d5.w*4),d1 ; get from y co-ord
- move.w (a3,d6.w*4),d2 ; get to x co-ord
- move.w 2(a3,d6.w*4),d3 ; get to y co-ord
- bsr calc_walk_parameters
-
- path_not_drawn_yet
- no_exit_this_way
- no_exit_selected
- rts
- Position_Stage_Player
- move.w Player_at_Stage,d7
- subq.w #1,d7
- move.l #Stage_Positions,a1
- move.w (a1,d7.w*4),d0 ; get x
- move.w 2(a1,d7.w*4),d1 ; get y
-
- *sub.w #7,d0 ; centre
- *sub.w #7,d1 ; centre
- move.w d0,sprite_x
- move.w d1,sprite_y
-
- rts
-
- draw_paths
- move.l #path_flags,a1 ; whether a path has been allowed
- move.l #stage_paths,a2 ; which two stages the path connects
- move.l #stage_positions,a3 ; position of the stages
- move.w #NUM_PATHS-1,d7
- path_loop
- move.w d7,d6
- move.w d7,d4
- asr.w #5,d6 ; divide by 32 (bits per longword)
- andi.w #%11111,d4 ; lower 5 bits 0-31 level
- move.w #31,d5 ; for the old swap round
- sub.w d4,d5 ; get right representation
-
- move.l (a1,d6.w*8),d4
- btst.l d5,d4 ; check path flag
- beq.s no_link_for_this_path
- move.w (a2,d7.w*4),d5 ; get 'from' stage number
- move.w 2(a2,d7.w*4),d6 ; get 'to' stage number
- subq.w #1,d5 ; they start at one you know
- subq.w #1,d6
-
- move.w (a3,d5.w*4),d0 ; get from x co-ord
- move.w 2(a3,d5.w*4),d1 ; get from y co-ord
- move.w (a3,d6.w*4),d2 ; get to x co-ord
- move.w 2(a3,d6.w*4),d3 ; get to y co-ord
- move.l buffered_plane1,a0
- bsr draw_line
- bra.s path_done
-
- no_link_for_this_path
-
- move.w (a2,d7.w*4),d5 ; get 'from' stage number
- move.w 2(a2,d7.w*4),d6 ; get 'to' stage number
- subq.w #1,d5 ; they start at one you know
- subq.w #1,d6
-
- move.w (a3,d5.w*4),d0 ; get from x co-ord
- move.w 2(a3,d5.w*4),d1 ; get from y co-ord
- move.w (a3,d6.w*4),d2 ; get to x co-ord
- move.w 2(a3,d6.w*4),d3 ; get to y co-ord
- move.l buffered_plane2,a0
- bsr draw_line
-
- path_done
- dbra d7,path_loop
-
- rts
-
- NUM_STAGES EQU 4
- NUM_PATHS EQU 4
- PassWord_Data
- ; Password data includes the following
- ;
- ; 1. Stage Player is at
- ; 2. All the links which have been made
- Player_at_Stage
- dc.w 1
- path_flags dc.l %11111111111111000011100101100111 ; first 32 pathways
- PASSWORD_BYTES EQU *-PassWord_Data
- dc.l 0
- dc.l 0
- dc.l 0
- text_test
- dc.b "PASSWORD : <"
- Password_Text
- dcb.b PASSWORD_BYTES*2,"0"
- dc.b ">",0
- even
-
- stage_positions
- dc.w 281,256-174 ; stage 1
- dc.w 256,256-149 ; stage 2
- dc.w 162,256-149 ; stage 3
- dc.w 78,256-149 ; stage 4
- dc.w 35,256-88 ; stage 5
- dc.w 103,256-88 ; stage 6
- dc.w 205,256-88 ; stage 7
- dc.w 154,256-36 ; stage 8
-
- stage_paths
- dc.w 1,2
- dc.w 2,3
- dc.w 3,4
- dc.w 3,6
- dc.w 5,6
- dc.w 6,7
- dc.w 7,8
- north equ 0
- east equ 2
- south equ 4
- west equ 6
- ; Stage exit of zero is null, otherwise path number
- Stage_Exits
- dc.w 0,0,1,0 ; stage 1
- dc.w 1,0,0,2 ; stage 2
- dc.w 0,2,4,3 ; stage 3
- dc.w 0,3,0,0 ; stage 4
- dc.w 0,5,0,0
- dc.w 4,6,0,5
- dc.w 0,0,7,6
- dc.w 7,0,0,0
-
- transit_flag
- dc.w 0
-
- * a0 pointer to bitmap, d0-d3 coords to draw to/from ok.
- calc_walk_parameters
- ; from d0,d1 to d2,d3
- move.w #1,transit_flag
- clr.w neg_x_walk_flag
- clr.w neg_y_walk_flag
- move.w d0,d4
- move.w d1,d5
- asl.w #7,d4
- asl.w #7,d5
- move.w d4,X_Fixed ; initial scaled x
- move.w d5,Y_Fixed ; initial scaled y
-
- sub.w d2,d0
- bpl.s no_neg_x_walk
- neg.w d0
- move.w #1,neg_x_walk_flag
- no_neg_x_walk
- sub.w d3,d1
- bpl.s no_neg_y_walk
- neg.w d1
- move.w #1,neg_y_walk_flag
- no_neg_y_walk
-
- cmp.w d0,d1
- bgt.s y_greater_walk
- x_greater_walk
- ext.l d0 ; for division
- ext.l d1 ; likewise
-
- move.w #1<<7,X_Increment ; Fixed (16,7)
- tst.l d1 ; check for nasty zero
- beq.s zero_y
- asl.w #7,d1 ; scale y to (16,7)
- divu.w d0,d1 ; calc y increment
- move.w d1,Y_Increment
- bra.s done_y_walk
- zero_y
- clr.w y_increment
- done_y_walk
-
- move.w d0,walk_countdown
- bra.s done_walk_calc
- y_greater_walk
- ext.l d0 ; for division
- ext.l d1 ; likewise
-
- move.w #1<<7,Y_Increment ; Fixed (16,7)
- tst.l d0 ; check for nasty zero
- beq.s zero_x
- asl.w #7,d0 ; scale y to (16,7)
- divu.w d1,d0 ; calc y increment
- move.w d0,X_Increment
- bra.s done_x_walk
- zero_x
- clr.w X_increment
- done_x_walk
-
- move.w d1,walk_countdown
- bra.s done_walk_calc
- done_walk_calc
- tst.w neg_x_walk_flag
- bne.s dont_negate_x_walk
- neg.w X_Increment
- dont_negate_x_walk
- tst.w neg_y_walk_flag
- bne.s dont_negate_y_walk
- neg.w Y_Increment
- dont_negate_y_walk
- rts
- X_Fixed dc.w 0
- Y_Fixed dc.w 0
- walk_countdown dc.w 0
- x_increment dc.w 0
- y_increment dc.w 0
- neg_x_walk_flag dc.w 0
- neg_y_walk_flag dc.w 0
-
- walk_the_line
- move.w X_Fixed,d0
- move.w Y_Fixed,d1
-
- add.w X_Increment,d0
- add.w Y_Increment,d1
-
- move.w d0,X_Fixed
- move.w d1,Y_Fixed
-
- asr.w #7,d0
- asr.w #7,d1
-
- move.w d0,sprite_x
- move.w d1,sprite_y
-
- subq.w #1,walk_countdown
- bne.s not_walked_yet
- move.w #0,transit_flag
- not_walked_yet
- rts
-
- draw_line
- movem.l d0-d7/a0-a6,-(sp)
- MOVEQ #0,D6
- MOVEQ #0,D7
- move.w D0,-(SP)
- MOVE.W D0,D6 ;STORE FOR USE IN CALCING START POS
- MOVE.W D1,D7
- CALC_OCTANT
- MOVEQ #0,D5 ;USE TO LOCATE OC
- sub.w d1,d3 ;sub y1 from y2
- bpl y2bigger
- neg.w d3
- bset #2,d5
- y2bigger
- sub.w d0,d2 ;x1 from x2
- bpl x2bigger
- neg.w d2
- bset #1,d5
- x2bigger
- cmp.w d2,d3 ;is deltax smaller than deltay
- BGe.s DELTAXSMALLER
- BSET #0,D5 ;D5 CONTAINS OCTANT POS
- move.w d3,sdelta
- move.w d2,ldelta
- bra.s calc_start
- DELTAXSMALLER
- move.w d3,ldelta
- move.w d2,sdelta
- CALC_START
- moveq #0,d2
- mulu #bytes_per_row,d7
-
- ADD.L D7,A0
- andi.w #$fff0,d6
- asr #3,d6
- ADD.L D6,A0 ;START POINT HELD IN A0
- MOVEQ #0,D6
- move.w sdelta,d6
- asl #1,d6
- move.w d6,sdelta
- MOVE.W LDELTA,D2
- MOVE.W d2,length
- SUB.W D2,D6
- asl #1,D2 ;CON LDELTA
- MOVE.W SDELTA,D1
- SUB.W D2,D1 ;contains xpres2
- MOVE.W (SP)+,D0 ;INIT BLTCON0
- andi.w #$000f,d0
- ROR.W #4,D0
- OR.W #$0b58,D0
- MOVE.W SDELTA,D7
- CMP.W LENGTH,D7
- BGT NO_SET
- MOVE.W #$40,D7
- BRA OR_IN_VAL
- NO_SET
- MOVE.W #0,D7
- OR_IN_VAL
- LEA TABLE,A6 ;OCTANT
- OR.B (A6,D5),D7
- BLITTER_IT
-
- BLITQ BTST #14,$dff002
- BNE BLITQ
- MOVE.W #$ffff,$dff072
- MOVE.W #$8000,$dff074 ;MUST BE THIS
- MOVE.L A0,$dff048 ;START ADDRESS
- MOVE.L A0,$dff054
- MOVE.l d6,$dff050 ;CONTAINS 2*SDELTA-LDELTA
- MOVE.W SDELTA,$dff062 ;2*SDELTA IN HERE
- MOVE.W d1,$dff064 ;CONTAINS 2*SDELTA-2*LDELTA (xpres2)
-
- MOVE.W D0,$dff040
-
- MOVE.W #bytes_per_row,$dff066 ;SCREEN WIDTH IN BYTES
- MOVE.W #bytes_per_row,$dff060
- MOVE.W D7,$dff042
- MOVE.W #$ffff,$dff044 ;MASK
- MOVE.W length,D0
- CMPi.W #0,D0
- BHI KLM
- MOVE.W #1,D0
- KLM
- asl #6,D0
- ADDi.W #2,D0
- MOVE.W D0,$dff058
- movem.l (sp)+,d0-d7/a0-a6
- RTS
- table
- DC.B 0*4+1
- DC.B 4*4+1
- DC.B 2*4+1
- DC.B 5*4+1
- DC.B 1*4+1
- DC.B 6*4+1
- DC.B 3*4+1
- DC.B 7*4+1
- EVEN
- sdelta dc.w 0
- length dc.w 0
- ldelta dc.w 0
- PassWord_Entry_Routine
- move.l #Player1_Selection_Boxes,a0
- move.l #Player1_Select_Struct,a1
- bsr draw_player_box
- moveq #0,d0
- bsr rawreadjoy
- move.l #Player1_Selection_Boxes,a0
- move.l #Player1_Select_Struct,a1
- bsr Move_Player_Box
- tst.l d0
- beq.s nothing_chosen
-
- ; button pressed
- move.w current_pass_count,d0
-
- move.w Fiddle_Number_Y(a1),d1
- mulu.w Num_Boxes_X(a0),d1
- add.w Fiddle_Number_X(a1),d1
- move.l #Password_Lookup,a1
- move.l #Password_Text,a2
-
- move.b (a1,d1),d3
-
- cmp.b #'.',d3 ; rub character ?
- bne.s dont_rub
- move.b #32,d3 ; space character
- tst.w d0
- beq.s no_char_to_rub
- move.b d3,-1(a2,d0)
- sub.w #1,current_pass_count
- bra.s no_char_to_rub
-
- dont_rub
- cmp.w #PASSWORD_BYTES*2,d0
- bge.s full_up_password
-
- move.b d3,(a2,d0)
- add.w #1,current_pass_count
- no_char_to_rub
- full_up_password
- nothing_chosen
- move.l #Player1_Selection_Boxes,a0
- move.l #Player1_Select_Struct,a1
- bsr draw_player_box
- rts
- current_pass_count dc.w 0
- Password_Lookup dc.b "0123456789"
- dc.b "ABCDEFGHIJ"
- dc.b "KLMNOPQRST"
- dc.b "UVWXYZ. <"
- even
-
- Move_Player_Box
- ; joystuff in d0
- ; boxes struct in a0
- ; player struct in a1
- move.w d0,d1
- andi.b #$f,d1
- bne.s dont_reset_joy_val
- clr.w player_frame_count(a1)
- dont_reset_joy_val
- tst.w player_frame_count(a1)
- beq.s do_the_norm
- subq.w #1,player_frame_count(a1)
- bra.s sodit
- do_the_norm
- btst #P1_Left,d0
- beq.s check_move_right
- tst.w Fiddle_Number_X(a1)
- beq.s check_box_y
- subq.w #1,Fiddle_Number_X(a1)
- move.w #BOX_FRAME_DELAY,player_frame_count(a1)
- check_move_right
- btst #P1_Right,d0
- beq.s check_box_y
- move.w Num_Boxes_X(a0),d1
- subq.w #1,d1
- cmp.w Fiddle_Number_X(a1),d1
- beq.s check_box_y
- addq.w #1,Fiddle_Number_X(a1)
- move.w #BOX_FRAME_DELAY,player_frame_count(a1)
- check_box_y
- btst #P1_Up,d0
- beq.s check_move_down
- tst.w Fiddle_Number_Y(a1)
- beq.s sodit
- subq.w #1,Fiddle_Number_Y(a1)
- move.w #BOX_FRAME_DELAY,player_frame_count(a1)
- check_move_down
- btst #P1_Down,d0
- beq.s sodit
-
- move.w Num_Boxes_Y(a0),d1
- subq.w #1,d1
- cmp.w Fiddle_Number_Y(a1),d1
- beq.s sodit
- addq.w #1,Fiddle_Number_Y(a1)
- move.w #BOX_FRAME_DELAY,player_frame_count(a1)
- sodit
- btst #P1_Fire,d0
- beq.s no_fire_press
- tst.w Fire_Button_Toggle(a1)
- bne.s nothing_doing
- move.w #-1,Fire_Button_Toggle(a1)
- moveq #-1,d0
- bra.s end_fire
- no_fire_press
- clr.w Fire_Button_Toggle(a1)
- nothing_doing
- moveq #0,d0
- end_fire
- rts
- BOX_FRAME_DELAY EQU 8
- rsreset
- Box_Start_X rs.w 1
- Box_Start_Y rs.w 1
- Box_Width rs.w 1
- Box_Height rs.w 1
- Num_Boxes_X rs.w 1
- Num_Boxes_Y rs.w 1
- Box_Gap_X rs.w 1
- Box_Gap_Y rs.w 1
- Player1_Selection_Boxes
- dc.w 12,66
- dc.w 15,15
- dc.w 10,4
- dc.w 1,1
-
- Player2_Selection_Boxes
- dc.w 160-3+17,255-163
- dc.w 19,22
- dc.w 6,5
- dc.w 3,3
- dc.w 8,70
- dc.w 71,79
- dc.w 2,2
- dc.w 3,3
-
- Draw_Player_Box
- ; selection boxes in a0
- ; player struct in a1
-
- move.w Fiddle_Number_X(a1),d0
- move.w Fiddle_Number_Y(a1),d1
- move.w Box_Width(a0),d2
- move.w Box_Height(a0),d3
- add.w Box_Gap_X(a0),d2
- add.w Box_Gap_Y(a0),d3
- mulu.w d2,d0
- mulu.w d3,d1
- add.w Box_Start_X(a0),d0
- add.w Box_Start_Y(a0),d1
-
- move.w Box_Width(a0),d2
- move.w Box_Height(a0),d3
-
- move.l buffered_Plane1,a0
- add.l Plane_Offset(a1),a0
- bsr draw_eor_thick_box
- rts
- draw_eor_thick_box
- move.w d0,d6
- move.w d1,d7
- move.w d2,d4
- move.w d3,d5
- move.w d0,d2
- add.w d4,d2
- move.w d1,d3
- bsr draw_line
- addq.w #1,d1
- addq.w #1,d3
- bsr draw_line
- add.w d5,d1
- add.w d5,d3
- subq.w #3,d1
- subq.w #3,d3
- bsr draw_line
- addq.w #1,d1
- addq.w #1,d3
- bsr draw_line
- move.w d6,d0
- move.w d7,d1
- move.w d0,d2
- move.w d1,d3
- addq.w #2,d1
- add.w d5,d3
- subq.w #2,d3
- bsr draw_line
- addq.w #1,d0
- addq.w #1,d2
- bsr draw_line
- add.w d4,d0
- add.w d4,d2
- subq.w #3,d0
- subq.w #3,d2
- bsr draw_line
- addq.w #1,d0
- addq.w #1,d2
- bsr draw_line
-
- rts
- Player1_Select_Struct
- dc.w 0,0,0,0
- dc.l 0
- Player2_Select_Struct
- dc.w 0,0,0,0
- dc.l 40 ; plane 2
-
- rsreset
- Fiddle_Number_X rs.w 1
- Fiddle_Number_Y rs.w 1
- Fire_Button_Toggle rs.w 1
- player_frame_count rs.w 1
- plane_offset rs.l 0
- P1_Left EQU 0
- P1_Right EQU 1
- P1_Up EQU 2
- P1_Down EQU 3
- P1_Fire EQU 4
- P2_Left EQU 0
- P2_Right EQU 1
- P2_Up EQU 2
- P2_Down EQU 3
- P2_Fire EQU 4
- rawreadjoy
- move.w $dff00c,d5
- move.w #0,d0
-
- btst #9,d5
- beq try_right_p1
- bset #P1_Left,d0
- bra.s upanddown_p1
- try_right_p1
- btst #1,d5
- beq.s upanddown_p1
- bset #P1_Right,d0
- upanddown_p1
- move.w d5,d6
- rol.w #1,d5
- eor.w d5,d6
- btst #1,d6
- beq.s tryup_p1
- bset #P1_Down,d0
- bra quitjoyread_p1
- tryup_p1
- btst #9,d6
- beq.s quitjoyread_p1
- bset #P1_Up,d0
- quitjoyread_p1
- btst #7,$bfe001
- bne.s no_fire_p1
- bset #P1_Fire,d0
- no_fire_p1
- rts
- rawreadjoy2
- move.w $dff00a,d5
- btst #9,d5
- beq try_left_p2
- bset #P2_Right,d0
- bra.s upanddown_p2
- try_left_p2
- btst #1,d5
- beq.s upanddown_p2
- bset #P2_Left,d0
- upanddown_p2
- move.w d5,d6
- rol.w #1,d5
- eor.w d5,d6
- btst #1,d6
- beq.s tryup_p2
- bset #P2_Down,d0
- bra quitjoyread_p2
- tryup_p2
- btst #9,d6
- beq.s quitjoyread_p2
- bset #P2_Up,d0
- quitjoyread_p2
- btst #6,$bfe001
- bne.s no_fire_p2
- bset #P2_Fire,d0
- no_fire_p2
- rts
- sprite_x dc.w 160
- sprite_y dc.w 128
- sprite_data
- dc.w 0,0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w $ffff,$f0f0
- dc.w 0,0
-
- display_sprite
- move.l #sprite_data,a0
- ifd show_demo
- move.l #blank_sprite,a0
- endc
- move.b #0,3(a0)
-
- move.w sprite_y,d0
- subq.w #8,d0
- add.w #$2c,d0
-
- btst #8,d0
- beq.s no_set_bit
- bset #2,3(a0)
- no_set_bit
- move.b d0,(a0) ;vertical
- add.w #16,d0
- btst #8,d0
- beq.s no_set_vstop
- bset #1,3(a0)
- no_set_vstop
- move.b d0,2(a0) ;vstop value
- move.w sprite_x,d0
- subq.w #8,d0
- add.w #$80,d0
-
- lsr #1,d0
- bcc no_set_vstart_bit
- bset.b #0,3(a0) ;horizontal lsb
- no_set_vstart_bit
- move.b d0,1(a0) ;horizontal
-
- move.l a0,d0
- move.w d0,select_sprite0l
- swap d0
- move.w d0,select_sprite0h
- rts
-
- PassWord_Entry_Text
- dc.b "0 1 2 3 4 5 6 7 8 9",0
- psel equ *-password_entry_text
- dc.b "A B C D E F G H I J",0
- dc.b "K L M N O P Q R S T",0
- dc.b "U V W X Y Z . >",0
- even
-
-
- blank_sprite
- dc.w 0,0,0,0
- ds.w 16*2
-
-
|