home *** CD-ROM | disk | FTP | other *** search
- opt p+ make sure it's position independent code
-
- IniTune equ $0000
- Refresh equ $000e
- TurnOff equ $001c
- InitFX equ $0038
-
- q
- ;fx ; Should/Will be defined if using Sampled FX.
-
- bra do_load
-
- sample_name dc.b 'SND.BIN',0
- even
- filesize equ 79710
-
-
- * equates for loader
-
- memf_chip equ 1<<1
-
- z_Open equ -30
- z_Close equ -36
- z_Read equ -42
- z_write equ -48
- z_Output equ -60
- z_AllocMem equ -198
- z_FreeMem equ -210
- z_OpenLibrary equ -552
-
-
- sysbase equ 4
- discbase dc.l 0
- file dc.l 0 handle
-
-
- * Call a library Using System variable 'sysbase'
- calls MACRO ; calls <library_vector_offset>,<library_pointer>
- move.l \2,a6
- jsr z_\1(a6)
- ENDM
-
- * Call a library Using MyProg variable 'discbase'
- calli MACRO ; calli <library_vector_offset>,<library_pointer>
- move.l \2(pc),a6
- jsr z_\1(a6)
- ENDM
-
-
- do_load
- move.l #filesize,d0 Request memory biginuf
- move.l #memf_chip,d1
- calls AllocMem,sysbase
- lea code_address(pc),a6
- move.l d0,(a6) Base address of mem block
- beq not_enough_memory
-
- lea libname(PC),A1
- moveq #0,d0
- calls OpenLibrary,sysbase Open the disk library
- lea discbase(pc),a6
- move.l d0,(a6)
-
- lea sample_name(pc),a6
- move.l a6,d1 Address of file name
- move.l #1005,d2 'file is Read only'
- calli Open,discbase
- lea file(pc),a6
- move.l d0,(a6) Unique file handle
- beq load_error
- move.l d0,d1 file handle
- move.l code_address(pc),d2 Start Address
- move.l #filesize,d3 Maximum length
- calli Read,discbase
- move.l file(pc),d1 file handle
- calli Close,discbase
-
-
- bra dunload
-
-
- libname dc.b 'dos.library',0
- even
-
-
- not_enough_memory
- calli Output,discbase
- move.l d0,d1
- move.l #err_len,d3
- lea mem_error_dat(pc),a6
- move.l a6,d2 address of message
- calli write,discbase and send it
- rts
-
- load_error
- calli Output,discbase
- move.l d0,d1
- move.l #derr_len,d3
- lea load_error_dat(pc),a6
- move.l a6,d2 address of message
- calli write,discbase and send it
-
- move.l #filesize,d0
- move.l code_address(pc),a1
- calls FreeMem,sysbase
- rts
-
- code_address dc.l 0
-
- mem_error_dat dc.b 'Not Enough Memory!',10
- err_len equ *-mem_error_dat
- even
-
- load_error_dat dc.b 'I Cannot Find The File!',10
- derr_len equ *-load_error_dat
- even
-
-
- dunload
- move.l #$fffff,d0 If you don't have this delay
- ddelay subq.l #1,d0 the disk motor will stay on!
- bne.s ddelay
-
- color00 equ $180
-
- coloop move.w d0,custom+color00
- subq.w #1,d0
- bne.s coloop
-
-
- lea oldintena(pc),a0
- move.w custom+intenar,(a0)+
- move.w #%0011111111111111,custom+intena disable chip irq
-
- move.l $0068,(a0)+ old int2
- move.l $006c,(a0)+ old int3
-
- lea vbl(pc),a0
- move.l a0,$006c revector int3
- move.w #%1100000000100000,custom+intena enable vertb irq
-
- bsr keyenable
-
-
- moveq #0,d0
- move.l code_address(pc),a0
- jsr IniTune(a0)
-
- loop
- lea q(pc),a0
- sf fly-q(a0)
- wf tst.b fly-q(a0)
- beq.s wf
-
- move.w #$07e0,d0
- onscn dbra d0,onscn
-
-
- move.w #$bbb,custom+color00
-
- move.l code_address(pc),a0
- jsr Refresh(a0)
-
- move.w #$000,custom+color00
-
- lea keycode(pc),a0
- move.b (a0),d0
- move.b #$ff,(a0)
-
-
- move.l code_address(pc),a0
- lea q(pc),a3
-
-
- cmp.b #$45,d0 (Esc)
- bne.s nesc
- move.w #%0011111111111111,custom+intena disable chip irq
- move.w #%0011111111111111,custom+intreq clr any req bits
-
- jsr TurnOff(a0)
-
- move.l #filesize,d0
- move.l code_address(pc),a1
- calls FreeMem,sysbase
-
-
- move.l oldint2(pc),$0068 revector int2
- move.l oldvbl(pc),$006c revector int3
- move.w oldintena(pc),d1
- or.w #%1100000000000000,d1 make sure we're writing
- moveq #0,d0 ret with no errors
- move.w d1,custom+intena old intena
- rts
- nesc
-
-
- cmp.b #$60,d0
- bne.s nosh1
- st shift-q(a3)
- nosh1
- cmp.b #$61,d0
- bne.s nosh2
- st shift-q(a3)
- nosh2
- cmp.b #$60+$80,d0
- bne.s nosh11
- sf shift-q(a3)
- nosh11
- cmp.b #$61+$80,d0
- bne.s nosh22
- sf shift-q(a3)
- nosh22
-
- cmp.b #$0a,d0 (0)
- bne.s nk0
- jsr TurnOff(a0)
- bra loop
- nk0
-
- cmp.b #$01,d0 (1)
- bne.s nk1
- moveq #0,d0
- jsr IniTune(a0)
- bra loop
- nk1
- cmp.b #$02,d0 (2)
- bne.s nk2
- moveq #1,d0
- jsr IniTune(a0)
- bra loop
- nk2
- cmp.b #$03,d0 (3)
- bne.s nk3
- move.w #2,d0
- jsr IniTune(a0)
- bra loop
- nk3
- cmp.b #$04,d0 (4)
- bne.s nk4
- moveq #3,d0
- jsr IniTune(a0)
- bra loop
- nk4
- cmp.b #$05,d0 (5)
- bne.s nk5
- moveq #4,d0
- jsr IniTune(a0)
- bra loop
- nk5
- cmp.b #$06,d0 (6)
- bne.s nk6
- moveq #5,d0
- jsr IniTune(a0)
- bra loop
- nk6
- cmp.b #$07,d0 (7)
- bne.s nk7
- moveq #6,d0
- jsr IniTune(a0)
- bra loop
- nk7
- cmp.b #$08,d0 (8)
- bne.s nk8
- move.b #7,d0
- jsr IniTune(a0)
- bra loop
- nk8
- cmp.b #$09,d0 (9)
- bne.s nk9
- moveq #8,d0
- jsr IniTune(a0)
- bra loop
- nk9
- cmp.b #$0B,d0 (-)
- bne.s nkB
- moveq #9,d0
- jsr IniTune(a0)
- bra loop
- nkB
- cmp.b #$0C,d0 (=)
- bne.s nkC
- moveq #10,d0
- jsr IniTune(a0)
- bra loop
- nkC
-
-
- cmp.b #$10,d0 (Q) Fx Now !
- bne.s nf1
- move.w #$00,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf1
- cmp.b #$11,d0 (W)
- bne.s nf2
- move.w #$01,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf2
- cmp.b #$12,d0 (E)
- bne.s nf3
- move.w #$02,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf3
- cmp.b #$13,d0 (R)
- bne.s nf4
- move.w #$03,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf4
- cmp.b #$14,d0 (T)
- bne.s nf5
- move.w #$04,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf5
- cmp.b #$15,d0 (Y)
- bne.s nf6
- move.w #$05,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf6
- cmp.b #$16,d0 (U)
- bne.s nf7
- move.w #$06,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf7
- cmp.b #$17,d0 (I)
- bne.s nf8
- move.w #$07,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf8
- cmp.b #$18,d0 (O)
- bne.s nf9
- move.w #$08,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf9
- cmp.b #$19,d0 (P)
- bne.s nf10
- move.w #$09,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf10
- cmp.b #$20,d0 (A)
- bne.s nf11
- move.w #$0a,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf11
- cmp.b #$21,d0 (S)
- bne.s nf12
- move.w #$0b,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf12
- cmp.b #$22,d0 (D)
- bne.s nf13
- move.w #$0c,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf13
- cmp.b #$23,d0 (F)
- bne.s nf14
- move.w #$0d,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf14
- cmp.b #$24,d0 (G)
- bne.s nf15
- move.w #$0e,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf15
- cmp.b #$25,d0 (H)
- bne.s nf16
- move.w #$0f,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf16
- cmp.b #$26,d0 (J)
- bne.s nf17
- move.w #$10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf17
- cmp.b #$27,d0 (K)
- bne.s nf18
- move.w #$11,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf18
- cmp.b #$28,d0 (L)
- bne.s nf19
- move.w #$12,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf19
- cmp.b #$31,d0 (Z)
- bne.s nf20
- move.w #$13,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf20
- cmp.b #$32,d0 (X)
- bne.s nf21
- move.w #$14,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf21
- cmp.b #$33,d0 (C)
- bne.s nf22
- move.w #$15,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf22
- cmp.b #$34,d0 (V)
- bne.s nf23
- move.w #$16,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nf23
-
- ifd fx
-
- ; Now Sampled Fx
- tst.b shift-q(a3)
- bne yesshift
-
- cmp.b #$50,d0 (F1)
- bne.s nof1
- move.w #$80,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof1
- cmp.b #$51,d0 (F2)
- bne.s nof2
- move.w #$81,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof2
- cmp.b #$52,d0 (F3)
- bne.s nof3
- move.w #$82,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof3
- cmp.b #$53,d0 (F4)
- bne.s nof4
- move.w #$83,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof4
- cmp.b #$54,d0 (F5)
- bne.s nof5
- move.w #$84,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof5
- cmp.b #$55,d0 (F6)
- bne.s nof6
- move.w #$85,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof6
- cmp.b #$56,d0 (F7)
- bne.s nof7
- move.w #$86,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof7
- cmp.b #$57,d0 (F8)
- bne.s nof8
- move.w #$87,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof8
- cmp.b #$58,d0 (F9)
- bne.s nof9
- move.w #$88,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof9
- cmp.b #$59,d0 (F10)
- bne.s nof10
- move.w #$89,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nof10
-
- yesshift
-
- tst.b shift-q(a3)
- beq noshift
-
- cmp.b #$50,d0 (Shift F1)
- bne.s nosf1
- move.w #$80+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf1
- cmp.b #$51,d0 (Shift F2)
- bne.s nosf2
- move.w #$81+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf2
- cmp.b #$52,d0 (Shift F3)
- bne.s nosf3
- move.w #$82+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf3
- cmp.b #$53,d0 (Shift F4)
- bne.s nosf4
- move.w #$83+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf4
- cmp.b #$54,d0 (Shift F5)
- bne.s nosf5
- move.w #$84+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf5
- cmp.b #$55,d0 (Shift F6)
- bne.s nosf6
- move.w #$85+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf6
- cmp.b #$56,d0 (Shift F7)
- bne.s nosf7
- move.w #$86+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf7
- ifd skip
-
- cmp.b #$57,d0 (Shift F8)
- bne.s nosf8
- move.w #$87+10,d0
- move.w #$03,d1
- jsr InitFX(a0)
- bra loop
- nosf8
- endc
- noshift
- endc
-
-
- cmp.b #$5f,d0 (Help)
- bne.s nh
- bchg #1,$bfe001
- bra loop
- nh
-
-
- bra loop
-
-
- vbl movem.l d0/a0,-(sp)
- move.w custom+intreqr,d0
- and.w custom+intenar,d0
- and.w #%0000000000100000,d0 is it a vbl irq ?
- beq.s vbx no
- move.w d0,custom+intreq yes so clr req bit
- lea fly(pc),a0
- st (a0)
- vbx movem.l (sp)+,d0/a0
- rte
-
- fly dc.w 0
-
- oldintena dc.w 0 old interrupt enable
- oldint2 dc.l 0 old int2
- oldvbl dc.l 0 old int3
-
- ciaa equ $bfe001
- talo equ $400
- tahi equ $500
- sdr equ $c00
- icr equ $d00
- cra equ $e00
-
- keyenable
- lea ciaa,a0
- move.b #%00000000,cra(a0) set input mode
- move.b #%10001000,icr(a0) enable sp intr
- lea int2(pc),a0
- move.l a0,$0068
- move.w #%1100000000001000,custom+intena
- lea keycode(pc),a0
- move.b #$ff,(a0)
- rts
-
-
- int2 movem.l d0/a0/a1,-(sp)
- move.w custom+intreqr,d0
- and.w #%0000000000001000,d0
- move.w d0,custom+intreq
- lea ciaa,a0
- move.b icr(a0),d0
- btst #4,d0
- bne.s int2x
- btst #3,d0
- bne.s keys
- int2x movem.l (sp)+,d0/a0/a1
- rte
-
- keys move.b sdr(a0),d0
- move.b #%00000001,sdr(a0) set output pulse
- move.b #%01000000,cra(a0) set output mode
-
- move.b #255,talo(a0) set timera latch
- move.b #0,tahi(a0) to 255
- bset #0,cra(a0) start timer
-
- not.b d0
- ror.b #1,d0
- lea keycode(pc),a1
- move.b d0,(a1)
-
- key1 btst #0,icr(a0)
- beq.s key1
- move.b #%00000000,cra(a0) set input mode
- bra.s int2x
-
- keycode dc.b $ff
- shift dc.b 0
- even
-
-
- * hardware register equates
-
- custom equ $dff000
-
- dmaconr equ $002
- intenar equ $01c
- intreqr equ $01e
- dmacon equ $096
- intena equ $09a
- intreq equ $09c
- adkcon equ $09e
-
- end
-
-
-