123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 |
- section Generic,Code_C
- OPT C-,D+
- opt p=68020
-
- BPR EQU 64
- GRAPHICS_MOD EQU 0
- XSIZE EQU 4
- YSIZE EQU 36
- XDEST EQU 42
- YDEST EQU 164
- SCROLL_WIDTH EQU 27
- NOP EQU 18
- NOC EQU 0
- CUSTOM EQU $DFF000
- BPLCONO EQU $100
- BPLCON1 EQU $102
- BPLCON2 EQU $104
- BPL1MOD EQU $108
- DDFSTRT EQU $092
- DDFSTOP EQU $094
- DIWSTRT EQU $08E
- DIWSTOP EQU $090
- VPSOR EQU $004
- COLOUR0 EQU $180
- COLOUR1 EQU $182
- COLOUR2 EQU $184
- COLOUR3 EQU $186
- DMACON EQU $096
- COP1LCH EQU $080
- COPJMP1 EQU $088
- DMAF_BLITTER EQU $0040
- DMAF_BLTDONE EQU $4000
- DMAF_BLTNZERO EQU $2000
- DMAB_BLTDONE EQU 14
- bltddat EQU $000
- dmaconr EQU $002
- vposr EQU $004
- vhposr EQU $006
- dskdatr EQU $008
- joy0dat EQU $00A
- joy1dat EQU $00C
- clxdat EQU $00E
- bltcon0 EQU $040
- bltcon1 EQU $042
- bltafwm EQU $044
- bltalwm EQU $046
- bltcpt EQU $048
- bltbpt EQU $04C
- bltapt EQU $050
- bltdpt EQU $054
- bltsize EQU $058
- bltcmod EQU $060
- bltbmod EQU $062
- bltamod EQU $064
- bltdmod EQU $066
- bltcdat EQU $070
- bltbdat EQU $072
- bltadat EQU $074
- dsksync EQU $07E
- cop1lc EQU $080
- cop2lc EQU $084
- bpl2mod EQU $10A
- bpldat EQU $110
- intreq EQU $09c
- intreqr EQU $01e
- MODE_OLDFILE EQU 1005
- MODE_NEWFILE EQU 1006
- start:
- move.l 4,a6
- jsr -132(A6) ;DISABLE tasking
- move.l 4,a6
- move.l #(256*64)*8,d0 ;
- move.l #1<<1+1<<16,d1 ;chip and clear
- jsr -198(a6) ;try
- tst.l d0
- bne allocated_mem
- rts ;otherwise quit
- allocated_mem
- move.l d0,Memory_Base
- move.l d0,Plane1
- add.l #(256*64),d0
- move.l d0,plane2
- add.l #(256*64),d0
- move.l d0,plane3
- add.l #(256*64),d0
- move.l d0,plane4
- add.l #(256*64),d0
- move.l d0,buff_plane1
- add.l #(256*64),d0
- move.l d0,buff_plane2
- add.l #(256*64),d0
- move.l d0,buff_plane3
- add.l #(256*64),d0
- move.l d0,buff_plane4
- bsr setup
- move.w #$0,$dff106
- bsr Main_Demo
- QUIT_OUT
- MOVE.L 4,A6
- JSR -138(A6) ;ENABLE tasking
- move.l oldint,$6c
- move.l 4,a6
- move.l #(256*64)*8,d0
- move.l Memory_Base,a1
- jsr -210(a6)
- MOVE.L #graf_NAME,A1
- MOVEQ #0,D0
- JSR -552(A6) ;OPEN GRAPHICS LIBRARY
- MOVE.L D0,a4
- MOVE.W #$8020,DMACON+$dff000 ; sprites back
-
- move.l 38(a4),$dff080
- clr.w $dff088
- move.b #$9b,$bfed01
- rts
- graf_NAME dc.b "graphics.library",0
- even
- setup
- bsr setup_colours
- LEA CUSTOM,A0
- MOVE.W #0,BPLCON1(A0)
- move.w #%1000000,BPLCON2(a0)
- move.w #$83a0,DMACON(a0)
- MOVE.W #$2C81,DIWSTRT(A0)
- MOVE.W #$2cC1,DIWSTOP(A0)
-
- MOVE.L #COPPERL,COP1LCH(A0)
- MOVE.W COPJMP1(A0),D0
-
- move.l $6c,oldint
- move.l #darkint,$6c
- rts
-
- setup_colours
- move.w #$180,d0
- move.l #copper_colours,a0
- move.l #col_list,a1
- move.w #16-1,d1
- col_loop
- move.w d0,(a0)+
- move.w (a1)+,(a0)+
- add.w #$2,d0
- dbra d1,col_loop
- rts
-
- col_list
- dc.w $000,$f00,$0f0,$00f,$ff0,$0ff,$f0f
- dc.w $fff,$77f,$707,$f77,$f7f,$7ff,$777
- dc.w $707,$070
-
- ************************************************************
- **** D A R K L I T E I N T E R R U P T ****
- ************************************************************
- darkint
- movem.l d0-d7/a0-a6,-(sp)
- movem.l (sp)+,d0-d7/a0-a6
- dc.w $4ef9
- oldint dc.l 0
- mt_data dc.l 0
- music_flag dc.b 0
- even
- play_colours
- dc.b 0
- even
- two_channel_flag dc.b 0
- even
- ************************************************************
- ***** S C R E E N S Y N C **********
- ************************************************************
-
- sync
- move.l #$dff000,a6
- move.w #$0010,intreq(a6)
- wait_for_bit
- btst.b #4,intreqr+1(a6)
- beq.s wait_for_bit
- rts
-
- Main_Demo
- bsr sync
- bsr display_whole_map
- bsr swap_buffers
- wait btst.b #6,$bfe001
- bne.s main_demo
- btst.b #10,$dff016
- bne.s main_demo
- rts
- Single_Mouse_Press
- btst #6,$BFE001
- Bne out
- * move.w #$11,jobba
- not_released
- btst #6,$BFE001
- Beq not_released
- out
- rts
- COPPERL
- dc.w bplcono
- dc.w $4200
- dc.w $102 ; scrolly bit
- dc.w $000
- dc.w DDFSTRT
- dc.w $0038
- dc.w DDFSTOP
- dc.w $00d8
- dc.w bpl1mod
- dc.w 16
- dc.w bpl2mod
- dc.w 16
- dc.w $1e4
- dc.w $2100
- dc.w $10c
- dc.w $11
- dc.w $1fc
- dc.w $f
- copper_colours
- ds.w 16*2
- ************sprites
- dc.w $120 ;all sprite stuff
- sprite0h dc.w $0
- dc.w $122
- sprite0l dc.w 0
- dc.w $124
- sprite1h dc.w $0
- dc.w $126
- sprite1l dc.w 0
- dc.w $128
- sprite2h dc.w $0
- dc.w $12a
- sprite2l dc.w 0
- dc.w $12c
- sprite3h dc.w $0
- dc.w $12e
- sprite3l dc.w 0
- dc.w $130
- sprite4h dc.w $0
- dc.w $132
- sprite4l dc.w 0
- dc.w $134
- sprite5h dc.w $0
- dc.w $136
- sprite5l dc.w 0
- dc.w $138
- sprite6h dc.w $0
- dc.w $13a
- sprite6l dc.w 0
- dc.w $13c
- sprite7h dc.w $0
- dc.w $13e
- sprite7l dc.w 0
-
-
- DC.W $00E0
- Plane1_Hi DC.W 0
- DC.W $00E2
- Plane1_Lo DC.W 0
- DC.W $00E4
- Plane2_Hi DC.W 0
- DC.W $00E6
- Plane2_Lo DC.W 0
- DC.W $00E8
- Plane3_Hi DC.W 0
- DC.W $00Ea
- Plane3_Lo DC.W 0
- DC.W $00Ec
- Plane4_Hi DC.W 0
- DC.W $00Ee
- Plane4_Lo DC.W 0
- dc.w $2c01,$ff00
- dc.w intreq
- dc.w $8010
- DC.W $2cff,$FFFE
- ds.w 1000*2
- swap_buffers
- move.l plane1,d0
- move.l plane2,d1
- move.l plane3,d2
- move.l plane4,d3
-
-
- move.l buff_plane1,plane1
- move.l buff_plane2,plane2
- move.l buff_plane3,plane3
- move.l buff_plane4,plane4
-
- move.l d0,buff_plane1
- move.l d1,buff_plane2
- move.l d2,buff_plane3
- move.l d3,buff_plane4
-
-
- move.w d0,plane1_lo
- swap d0
- move.w d0,plane1_hi
-
- move.w d1,plane2_lo
- swap d1
- move.w d1,plane2_hi
- move.w d2,plane3_lo
- swap d2
- move.w d2,plane3_hi
- move.w d3,plane4_lo
- swap d3
- move.w d3,plane4_hi
- rts
-
- Blank Dc.l 0
- Memory_Base dc.l 0
- clear_pixel
- mulu.w #BPR,d1
- add.l d1,a0
- move.w d0,d3
- lsr.w #3,d0 ; get bytes
- andi.b #%111,d3 ; pixel bits
- moveq #7,d1
- sub.b d3,d1
- bclr.b d1,(a0,d0.w) ;
- rts
- plane1
- dc.l 0
- plane2
- dc.l 0
- plane3
- dc.l 0
- plane4
- dc.l 0
-
-
- buff_plane1
- dc.l 0
- buff_plane2
- dc.l 0
- buff_plane3
- dc.l 0
- buff_plane4
- dc.l 0
-
- WHOLE_ACR EQU 6 ;accuracy
- ACCURACY EQU 64
- crap1 dc.w 11
- inc dc.w 4
- ******************************************
- ***** DISPLAY WHOLE MAP *****
- ******************************************
- display_whole_map
- clear_block_on_screen
- btst #14,dmaconr(a6)
- bne.s clear_block_on_screen
- move.w #BPR-40,bltdmod(a6)
- move.w #0,bltadat(a6)
- move.l #$ffffffff,bltafwm(a6)
- move.l #$01F00000,bltcon0(A6)
- move.l plane1,bltdpt(a6) ;screen
- move.w #256<<6+20,bltsize(a6) ;1 word by 16 pixels
- wait_block_on_screen
- btst #14,dmaconr(a6)
- bne.s wait_block_on_screen
- move.w inc,d0
- add.w d0,crap1
-
- cmp.w #10,crap1
- bgt.s ok_x
- neg.w inc
- ok_x
- cmp.w #200,crap1
- blt.s ok_x2
- neg.w inc
- ok_x2
-
- move.w crap1,y_show_size
- move.w crap1,x_show_size
-
- moveq #0,d2 ;increment values
- moveq #0,d3
-
- moveq #16,d5 ;y
- move.l plane1,a0
-
-
-
- move.w #100,d0
- asl.w #WHOLE_ACR,d0
- ext.l d0
- move.w d0,d1
- divu x_show_size,d0
- move.w #100,d1
- asr.w #WHOLE_ACR,d1
- add.w d1,x_show_size
- move.w #100,d1
- asl.w #WHOLE_ACR,d1
- ext.l d1
- divu y_show_size,d1
-
- move.w #100,d2
- asr.w #WHOLE_ACR,d2
- add.w d2,y_show_size
-
-
- add.w #16,x_show_size
- add.w #16,y_show_size
-
- move.l #map_data,a2
- move.l a2,a4 ;store for later
- do_pixel_y
- move.w #16,d4
- moveq #0,d2
- do_pixel_x
- tst.b (a2)
- bne.s draw_a_pixel
- bra.s get_next
- draw_a_pixel
- move.w d4,d6
- move.w d5,d7
- move.l a0,a5
- bsr draw_pixel
- get_next
- addq.w #1,d4
- cmp.w x_show_size,d4
- bgt.s done_x_line
-
- *calculate block step for x
- add.w d0,d2
- move.w d2,d7
- andi.w #ACCURACY-1,d2
- asr.w #WHOLE_ACR,d7
-
- tst d7
- beq.s do_pixel_x
- ext.l d7
- add.l d7,a2
- bra.s do_pixel_x
- done_x_line
- addq.w #1,d5
- cmp.w y_show_size,d5
- bgt.s done_y_line
-
- *calculate block step for y
- add.w d1,d3
- move.w d3,d7
- andi.w #ACCURACY-1,d3
- asr.w #WHOLE_ACR,d7
-
- tst d7
- beq.s dont_increase_y_block
- move.w #100,d6
- mulu d7,d6 ;number of lines to add
- add.l d6,a4
- dont_increase_y_block
- move.l a4,a2
- bra do_pixel_y
- done_y_line
- rts
- x_show_size dc.w 0
- y_show_size dc.w 0
- ******************************************
- ***** DRAW PIXEL *****
- ******************************************
- draw_pixel
- *send mem in a0, x and y in d0 and d1
-
- mulu #BPR,d7
- add.l d7,a5
- move.w d6,d7
- lsr.w #3,d6 ; get bytes
- andi.b #%111,d7 ; pixel bits
- neg.w d7
- addq.w #7,d7
- ext.l d6
- bset.b d7,(a5,d6)
- rts
-
- graphics
- incbin "scratch:empty/grap.bin"
- even
- map_data
- incbin "scratch:empty/testmapraw"
- even
-
|