mirror of
https://github.com/Pecusx/Young-lumberjack.git
synced 2026-05-20 22:33:54 +02:00
scaffolding
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
|
||||
*.bak
|
||||
*.lab
|
||||
*.lst
|
||||
@@ -0,0 +1,161 @@
|
||||
;-------------------------------------
|
||||
.MACRO ROLW
|
||||
ROL :1
|
||||
ROL :1+1
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO ASLW
|
||||
ASL :1
|
||||
ROL :1+1
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO RORW
|
||||
ROR :1+1
|
||||
ROR :1
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO LSRW
|
||||
LSR :1+1
|
||||
ROR :1
|
||||
.ENDM
|
||||
|
||||
;-------------------------------------
|
||||
.MACRO VMAIN
|
||||
; VMAIN #WORD,interrupt.vector
|
||||
; interrupt.vector:
|
||||
; 0 - VIMIRQ
|
||||
; 1 - TIMCNT1
|
||||
; 2 - TIMCNT2
|
||||
; 3 - TIMCNT3
|
||||
; 4 - TIMCNT4
|
||||
; 5 - TIMCNT5
|
||||
; 6 - VVBLKI
|
||||
; 7 - VVBLKD
|
||||
; 8 - TIMVEC1
|
||||
; 9 - TIMVEC2
|
||||
; Initialises Vertical Blank Interrupts
|
||||
; (works only with system interrupts ON)
|
||||
;----------
|
||||
; on 5200 it sets up deferred VBL ONLY for now
|
||||
sei
|
||||
lda #$00 ;Disable all interruptes
|
||||
sta nmien
|
||||
sta irqen
|
||||
|
||||
@ lda vcount
|
||||
bne @-
|
||||
mwa #:1 VVBLKD
|
||||
mva #$40 nmien
|
||||
;Enable IRQ interrupts
|
||||
sta pokmsk
|
||||
sta irqen
|
||||
cli
|
||||
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO VDLI
|
||||
; VDLI #WORD
|
||||
; Initialises Display List Interrupts
|
||||
mwa #:1 VDSLST
|
||||
mva #$C0 NMIEN
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO halt
|
||||
?stop
|
||||
lda RANDOM
|
||||
and #$05
|
||||
sta COLBAK
|
||||
jmp ?stop
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO KEY
|
||||
; KEY
|
||||
; waits for releasing and pressing "any key"
|
||||
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO WAIT
|
||||
; WAIT
|
||||
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
||||
?ze LDA VCOUNT
|
||||
cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
|
||||
bcc ?ze
|
||||
sbc #10 ; last lines correction
|
||||
?wa cmp VCOUNT
|
||||
bcc ?wa
|
||||
?wf cmp VCOUNT
|
||||
bcs ?wf
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.macro waitRTC
|
||||
lda RTCLOK+1
|
||||
?wa cmp RTCLOK+1
|
||||
beq ?wa
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro negw
|
||||
; negate the given word (0-a)
|
||||
;-------------------------------------
|
||||
sec
|
||||
lda #$00
|
||||
sbc :1
|
||||
sta :1
|
||||
lda #$00
|
||||
sbc :1+1
|
||||
sta :1+1
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro randomize
|
||||
;usage: randomize floor ceiling
|
||||
;returns (in A) a random .byte between "floor" and "ceiling"
|
||||
.if :2 < :1
|
||||
.error "floor higher than ceiling"
|
||||
.endif
|
||||
?rand
|
||||
lda random
|
||||
cmp #:2+1-:1 ;ceiling
|
||||
bcs ?rand
|
||||
.if %1>0 ; if floor = 0 - no add offset
|
||||
adc #:1
|
||||
.endif
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro phx
|
||||
txa
|
||||
pha
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro phy
|
||||
tya
|
||||
pha
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro plx
|
||||
pla
|
||||
tax
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro ply
|
||||
pla
|
||||
tay
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro txy
|
||||
txa
|
||||
tay
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro tyx
|
||||
tya
|
||||
tax
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro pause
|
||||
;waits :1 number (byte) of frames
|
||||
ldx #:1
|
||||
?PAUSELOOP
|
||||
wait
|
||||
dex
|
||||
bne ?PAUSELOOP
|
||||
.ENDM
|
||||
|
||||
+272
@@ -0,0 +1,272 @@
|
||||
;****************************************************************************
|
||||
;* ATARI 5200 CONSOLE *
|
||||
;* SYSTEM EQUATES *
|
||||
;****************************************************************************
|
||||
; based on https://web.archive.org/web/20200831200348/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html
|
||||
;
|
||||
; OS VARIABLES FOR 5200
|
||||
;
|
||||
; PAGE 0
|
||||
POKMSK = $00 ;pokmsk at $00 on Atari 5200 instead of $10 on Atari XL
|
||||
RTCLOK = $01 ;Actually $01/$02
|
||||
CRITIC = $03
|
||||
ATRACT = $04 ;attact at $04 on Atari 5200 instead of $4D on Atari XL
|
||||
DLPTRS = $05 ;DLPTRS at $05/$06 on Atari 5200 instead of $230 on Atari XL
|
||||
DMACTLS = $07 ;DMACTLS at $07 on Atari 5200 instead of $22f on Atari XL
|
||||
SSKCTL = skctl ;There is no shadow on Atari 5200
|
||||
PCOLR0 EQU $08 ;P0 COLOR
|
||||
PCOLR1 EQU $09 ;P1 COLOR
|
||||
PCOLR2 EQU $0a ;P2 COLOR
|
||||
PCOLR3 EQU $0b ;P3 COLOR
|
||||
COLOR0 EQU $0c ;COLOR 0
|
||||
COLOR1 EQU $0d
|
||||
COLOR2 EQU $0e
|
||||
COLOR3 EQU $0f
|
||||
COLOR4 EQU $10
|
||||
COLBAKS EQU COLOR4
|
||||
PADDL0 EQU $11
|
||||
PADDL1 EQU $12
|
||||
PADDL2 EQU $13
|
||||
PADDL3 EQU $14
|
||||
PADDL4 EQU $15
|
||||
PADDL5 EQU $16
|
||||
PADDL6 EQU $17
|
||||
PADDL7 EQU $18
|
||||
STICK0 = $19 ;There is no stick0 but we will make the analog stick look like a digital one and store it here
|
||||
STRIG0 = $1a ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GTIA
|
||||
chbas = $1b ;There is no CHBAS but we will make this the shadow of the CHBASE
|
||||
CONSOL = $1c ;There are no console keys on Atari 5200, so we replace console h/w reads with a new shadow based on the keypad keys
|
||||
consol_reset = $07;The constant value representing that no consol key is pressed
|
||||
kbcode = $1d ;There is no keyboard on the Atari 5200, so replace kbcode h/w reads with a byte variable read based on the keypad keys
|
||||
|
||||
; PAGE 2
|
||||
VIMIRQ EQU $0200 ;IMMED IRQ VECTOR
|
||||
VVBLKI EQU $0202 ;IMM VBLK NMI VECTOR
|
||||
VVBLKD EQU $0204 ;DEF VBLK NMI VECTOR
|
||||
VDSLST EQU $0206 ;DSP LIST NMI VECTOR
|
||||
VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR
|
||||
VKEYCNT EQU $020A ;Keypad routine continuation vector
|
||||
BRKKY EQU $023C ;BREAK KEY VECTOR
|
||||
VBREAK EQU $020E ;BRK INST IRQ VECTOR
|
||||
VSERIN EQU $0210 ;POKEY INPUT RDY IRQ
|
||||
VSEROR EQU $0212 ;POKEY OUTPUT RDY
|
||||
VSEROC EQU $0214 ;POKEY OUTPUT DONE
|
||||
VTIMR1 EQU $0216 ;POKEY TIMER 1 IRQ
|
||||
VTIMR2 EQU $0218 ;POKEY TIMER 2 IRQ
|
||||
VTIMR4 EQU $021A ;POKEY TIMER 4 IRQ
|
||||
|
||||
|
||||
ROM_SETTINGS = $bfe8 ; game ROM info start (24 bytes total, 20b title, 2b year, 2b start vector)
|
||||
|
||||
; HARDWARE REGISTERS
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
POKEY EQU $EB00
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
; READ
|
||||
;
|
||||
POT0 EQU POKEY+$00
|
||||
POT1 EQU POKEY+$01
|
||||
POT2 EQU POKEY+$02
|
||||
POT3 EQU POKEY+$03
|
||||
POT4 EQU POKEY+$04
|
||||
POT5 EQU POKEY+$05
|
||||
POT6 EQU POKEY+$06
|
||||
POT7 EQU POKEY+$07
|
||||
ALLPOT EQU POKEY+$08
|
||||
KBCODE_5200 EQU POKEY+$09
|
||||
RANDOM EQU POKEY+$0a
|
||||
POTGO EQU POKEY+$0b
|
||||
SERIN EQU POKEY+$0d
|
||||
IRQST EQU POKEY+$0e
|
||||
SKSTAT EQU POKEY+$0f
|
||||
;
|
||||
; WRITE
|
||||
;
|
||||
AUDF1 EQU POKEY+$00
|
||||
AUDC1 EQU POKEY+$01
|
||||
AUDF2 EQU POKEY+$02
|
||||
AUDC2 EQU POKEY+$03
|
||||
AUDF3 EQU POKEY+$04
|
||||
AUDC3 EQU POKEY+$05
|
||||
AUDF4 EQU POKEY+$06
|
||||
AUDC4 EQU POKEY+$07
|
||||
AUDCTL EQU POKEY+$08
|
||||
STIMER EQU POKEY+$09
|
||||
SKRES EQU POKEY+$0a
|
||||
SEROUT EQU POKEY+$0d
|
||||
IRQEN EQU POKEY+$0e
|
||||
SKCTL EQU POKEY+$0f
|
||||
;
|
||||
;
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
GTIA EQU $C000
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
; WRITE
|
||||
;
|
||||
HPOSP0 EQU GTIA+$00
|
||||
HPOSP1 EQU GTIA+$01
|
||||
HPOSP2 EQU GTIA+$02
|
||||
HPOSP3 EQU GTIA+$03
|
||||
HPOSM0 EQU GTIA+$04
|
||||
HPOSM1 EQU GTIA+$05
|
||||
HPOSM2 EQU GTIA+$06
|
||||
HPOSM3 EQU GTIA+$07
|
||||
SIZEP0 EQU GTIA+$08
|
||||
SIZEP1 EQU GTIA+$09
|
||||
SIZEP2 EQU GTIA+$0a
|
||||
SIZEP3 EQU GTIA+$0b
|
||||
SIZEM EQU GTIA+$0c
|
||||
GRAFP0 EQU GTIA+$0d
|
||||
GRAFP1 EQU GTIA+$0e
|
||||
GRAFP2 EQU GTIA+$0f
|
||||
GRAFP3 EQU GTIA+$10
|
||||
GRAFM EQU GTIA+$11
|
||||
COLPM0 EQU GTIA+$12
|
||||
COLPM1 EQU GTIA+$13
|
||||
COLPM2 EQU GTIA+$14
|
||||
COLPM3 EQU GTIA+$15
|
||||
COLPF0 EQU GTIA+$16
|
||||
COLPF1 EQU GTIA+$17
|
||||
COLPF2 EQU GTIA+$18
|
||||
COLPF3 EQU GTIA+$19
|
||||
COLBAK EQU GTIA+$1a
|
||||
PRIOR EQU GTIA+$1b
|
||||
GPRIOR = PRIOR ; no PRIOR shadow (GPRIOR)
|
||||
VDELAY EQU GTIA+$1c
|
||||
GRACTL EQU GTIA+$1d
|
||||
HITCLR EQU GTIA+$1e
|
||||
CONSOL5200 EQU GTIA+$1f ; no CONSOL in 5200
|
||||
;
|
||||
; READ
|
||||
;
|
||||
M0PF EQU GTIA+$00
|
||||
M1PF EQU GTIA+$01
|
||||
M2PF EQU GTIA+$02
|
||||
M3PF EQU GTIA+$03
|
||||
P0PF EQU GTIA+$04
|
||||
P1PF EQU GTIA+$05
|
||||
P2PF EQU GTIA+$06
|
||||
P3PF EQU GTIA+$07
|
||||
M0PL EQU GTIA+$08
|
||||
M1PL EQU GTIA+$09
|
||||
M2PL EQU GTIA+$0a
|
||||
M3PL EQU GTIA+$0b
|
||||
P0PL EQU GTIA+$0c
|
||||
P1PL EQU GTIA+$0d
|
||||
P2PL EQU GTIA+$0e
|
||||
P3PL EQU GTIA+$0f
|
||||
TRIG0 EQU GTIA+$10
|
||||
TRIG1 EQU GTIA+$11
|
||||
TRIG2 EQU GTIA+$12
|
||||
TRIG3 EQU GTIA+$13
|
||||
PAL EQU GTIA+$14
|
||||
;
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
ANTIC EQU $D400
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
DMACTL EQU ANTIC+$00
|
||||
CHACTL EQU ANTIC+$01
|
||||
DLPTR EQU ANTIC+$02
|
||||
;DLISTH EQU ANTIC+$03
|
||||
HSCROL EQU ANTIC+$04
|
||||
VSCROL EQU ANTIC+$05
|
||||
PMBASE EQU ANTIC+$07
|
||||
CHBASE EQU ANTIC+$09
|
||||
WSYNC EQU ANTIC+$0a
|
||||
VCOUNT EQU ANTIC+$0b
|
||||
PENH EQU ANTIC+$0c
|
||||
PENV EQU ANTIC+$0d
|
||||
NMIEN EQU ANTIC+$0e
|
||||
NMIRES EQU ANTIC+$0f
|
||||
NMIST EQU ANTIC+$0f
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
; Atari ANTIC chip display list equates
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
JUMP EQU $01 ; display list jump instruction (3 byte)
|
||||
JVB EQU $41 ; display list jump and wait for vblank instruction (3)
|
||||
;
|
||||
SCH EQU $10 ; display list horizontal scrolling
|
||||
SCV EQU $20 ; display list vertical scrolling
|
||||
LMS EQU $40 ; display list load memory scan instruction (3 byte)
|
||||
DLII EQU $80 ; display list interrupt instruction
|
||||
;
|
||||
SKIP1 EQU $00 ; display list skip 1 scan line instruction
|
||||
SKIP2 EQU $10 ; display list skip 2 scan lines instruction
|
||||
SKIP3 EQU $20 ; display list skip 3 scan lines instruction
|
||||
SKIP4 EQU $30 ; display list skip 4 scan lines instruction
|
||||
SKIP5 EQU $40 ; display list skip 5 scan lines instruction
|
||||
SKIP6 EQU $50 ; display list skip 6 scan lines instruction
|
||||
SKIP7 EQU $60 ; display list skip 7 scan lines instruction
|
||||
SKIP8 EQU $70 ; display list skip 8 scan lines instruction
|
||||
;
|
||||
MODE2 EQU $02 ; display list mode 2
|
||||
MODE4 EQU $04 ; display list mode 4
|
||||
MODE8 EQU $08 ; display list mode 8
|
||||
MODEE EQU $0E ; display list mode E
|
||||
MODEF EQU $0F ; display list mode F
|
||||
; ---------------------------------------------------------------------------
|
||||
; ENUMS
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
.enum @dmactl
|
||||
blank = %00
|
||||
narrow = %01
|
||||
standard= %10
|
||||
wide = %11
|
||||
missiles= %100
|
||||
players = %1000
|
||||
lineX1 = %10000
|
||||
lineX2 = %00000
|
||||
dma = %100000
|
||||
.ende
|
||||
|
||||
scr48 = @dmactl(wide|dma|players|missiles|lineX1)
|
||||
scr40 = @dmactl(standard|dma|players|missiles|lineX1)
|
||||
scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
|
||||
|
||||
.enum @pmcntl
|
||||
missiles= %1
|
||||
players = %10
|
||||
trigs = %100
|
||||
.ende
|
||||
|
||||
.enum @gtictl
|
||||
prior0 = %0
|
||||
prior1 = %1
|
||||
prior2 = %10
|
||||
prior4 = %100
|
||||
prior8 = %1000
|
||||
ply5 = %10000 ; Fifth Player Enable
|
||||
mlc = %100000 ; Multiple Color Player Enable
|
||||
mode9 = %01000000
|
||||
mode10 = %10000000
|
||||
mode11 = %11000000
|
||||
.ende
|
||||
/*
|
||||
; commented out to be replaced by the application specific A800 --> 5200 keypad translation
|
||||
.enum @kbcode
|
||||
_0
|
||||
_1
|
||||
_2
|
||||
_3
|
||||
_4
|
||||
_5
|
||||
_6
|
||||
_7
|
||||
_8
|
||||
_9
|
||||
_asterisk = $0a
|
||||
_hash = $0b
|
||||
_start = $0c
|
||||
_pause = $0d
|
||||
_reset = $0e
|
||||
.ende
|
||||
*/
|
||||
@@ -0,0 +1,738 @@
|
||||
;****************************************************************************
|
||||
;* ATARI PERSONAL COMPUTER *
|
||||
;* SYSTEM EQUATES *
|
||||
;****************************************************************************
|
||||
;
|
||||
; OPERATING SYSTEM EQUATE FILE
|
||||
;
|
||||
; MODULE ORIGIN TABLE
|
||||
;
|
||||
; VECTOR TABLE
|
||||
;
|
||||
; HANDLER ENTRY POINTS ARE CALL-
|
||||
; ED OUT IN THE FOLLOWING VECTOR
|
||||
; TABLE. THESE ARE THE ADDRESSES
|
||||
; MINUS ONE.
|
||||
;
|
||||
; EXAMPLE FOR EDITOR
|
||||
;
|
||||
; E400 OPEN
|
||||
; 2 CLOSE
|
||||
; 4 GET
|
||||
; 6 PUT
|
||||
; 8 STATUS
|
||||
; A SPECIAL
|
||||
; C JUMP TO POWER ON INIT
|
||||
; F NOT USED
|
||||
;
|
||||
EDITRV EQU $E400 ;EDITOR
|
||||
SCRENV EQU $E410 ;TV SCREEN
|
||||
KEYBDV EQU $E420 ;KEYBOARD
|
||||
PRINTV EQU $E430 ;PRINTER
|
||||
CASETV EQU $E440 ;CASSETTE
|
||||
;
|
||||
; JUMP VECTOR TABLE
|
||||
;
|
||||
; THE FOLLOWING IS A TABLE OF
|
||||
; JUMP INSTRUCTIONS TO VARIOUS
|
||||
; ENTRY POINTS IN THE OPERATING
|
||||
; SYSTEM
|
||||
;
|
||||
DISKIV EQU $E450 ;DISK INITIALIZATION
|
||||
DSKINV EQU $E453 ;DISK INTERFACE
|
||||
CIOV EQU $E456 ;CENTRAL I/O ROUTINE
|
||||
SIOV EQU $E459 ;SERIAL I/O ROUTINE
|
||||
SETVBV EQU $E45C ;SET SYSTEM TIMERS
|
||||
SYSVBV EQU $E45F ;VBLANK CALCULATIONS
|
||||
XITVBV EQU $E462 ;EXIT VBLANK
|
||||
SIOINV EQU $E465 ;SIO INITIALIZATION
|
||||
SENDEV EQU $E468 ;SEND ENABLE ROUTINE
|
||||
INTINV EQU $E46B ;INTRPT HANDLER INIT
|
||||
CIOINV EQU $E46E ;CIO INITIALIZATION
|
||||
BLKBDV EQU $E471 ;BLACKBOARD MODE
|
||||
WARMSV EQU $E474 ;WARM START VECTOR
|
||||
COLDSV EQU $E477 ;COLD START VECTOR
|
||||
RBLOKV EQU $E47A ;CASSETTE READ BLOCK
|
||||
CSOPIV EQU $E47D ;CASSETTE INPUT OPEN
|
||||
;
|
||||
; VECTORS ADDED FOR 800XL
|
||||
;
|
||||
PUPDIV EQU $E480 ;POWER UP DISPLAY
|
||||
SLFTSV EQU $E483 ;SELF TEST PROGRAM
|
||||
PHENTV EQU $E486 ;UPLOADED HANDLER ENTER
|
||||
PHULNV EQU $E489 ;UPLOADED HANDLER UNLINK
|
||||
PHINIV EQU $E48C ;UPLOADED HANDLER INIT
|
||||
;
|
||||
; OPERATING SYSTEM EQUATES
|
||||
;
|
||||
; COMMAND CODES FOR IOCBS
|
||||
;
|
||||
_OPEN EQU $03 ;OPEN FOR I/O
|
||||
GETREC EQU $05 ;GET RECORD (TEXT)
|
||||
GETCHR EQU $07 ;GET CHARACTER(S)
|
||||
PUTREC EQU $09 ;PUT RECORD (TEXT)
|
||||
PUTCHR EQU $0B ;PUT CHARACTER(S)
|
||||
_CLOSE EQU $0C ;CLOSE DEVICE
|
||||
STATIS EQU $0D ;STATUS REQUEST
|
||||
SPECIL EQU $0E ;SPECIAL ENTRY COMMAND
|
||||
;
|
||||
; SPECIAL ENTRY COMMANDS
|
||||
;
|
||||
DRAWLN EQU $11 ;DRAW LINE
|
||||
FILLIN EQU $12 ;FILL
|
||||
RENAME EQU $20 ;RENAME DISK FILE
|
||||
DELETE EQU $21 ;DELETE DISK FILE
|
||||
FORMAT EQU $22 ;FORMAT DISK
|
||||
LOCKFL EQU $23 ;LOCK FILE
|
||||
UNLOCK EQU $24 ;UNLOCK FILE
|
||||
POINT EQU $25 ;POINT SECTOR
|
||||
NOTE EQU $26 ;NOTE SECTOR
|
||||
IOCFRE EQU $FF ;IOCB "FREE"
|
||||
;
|
||||
; AUX1 EQUATES
|
||||
; () INDICATES WHICH DEVICES
|
||||
;
|
||||
APPEND EQU $01 ;WR APPEND(D)-SCN RD(E)
|
||||
DIRECT EQU $02 ;OPEN DIRECTORY(D)
|
||||
OPNIN EQU $04 ;OPEN FOR INPUT(ALL)
|
||||
OPNOT EQU $08 ;OPEN FOR OUTPUT(ALL)
|
||||
OPNINO EQU $0C ;OPEN INPUT&OUTPUT(ALL)
|
||||
MXDMOD EQU $10 ;OPEN MIXED MODE(E,S)
|
||||
INSCLR EQU $20 ;OPEN W/O CLEAR(E,S)
|
||||
;
|
||||
; DEVICE NAMES
|
||||
;
|
||||
SCREDT EQU 'E' ;SCREEN EDITOR (R/W)
|
||||
KBD EQU 'K' ;KEYBOARD (R ONLY)
|
||||
DISPLY EQU 'S' ;SCREEN DISPLAY (R/W)
|
||||
PRINTR EQU 'P' ;PRINTER (W ONLY)
|
||||
CASSET EQU 'C' ;CASSETTE (R/W)
|
||||
RS232 EQU 'R' ;MODEM (R/W)
|
||||
DISK EQU 'D' ;DISK (R/W)
|
||||
;
|
||||
;
|
||||
;
|
||||
; OPERATING SYSTEM STATUS CODES
|
||||
;
|
||||
SUCCES EQU $01 ;SUCCESSFUL OPERATION
|
||||
BRKABT EQU $80 ;BREAK KEY ABORT
|
||||
PRVOPN EQU $81 ;IOCB ALREADY OPEN
|
||||
NONDEV EQU $82 ;NON-EXISTANT DEVICE
|
||||
WRONLY EQU $83 ;IOCB OPEN FOR W ONLY
|
||||
NVALID EQU $84 ;INVALID COMMAND
|
||||
NOTOPN EQU $85 ;DEVICE/FILE NOT OPEN
|
||||
BADIOC EQU $86 ;INVALID IOCB #
|
||||
RDONLY EQU $87 ;IOCB OPEN FOR R ONLY
|
||||
EOFERR EQU $88 ;END OF FILE
|
||||
TRNRCD EQU $89 ;TRUNCATED RECORD
|
||||
TIMOUT EQU $8A ;PERIPHERAL TIMEOUT
|
||||
DNACK EQU $8B ;DEVICE NO ACKNOWLEDGE
|
||||
FRMERR EQU $8C ;SERIAL BUS FRAME ERR
|
||||
CRSROR EQU $8D ;CURSOR OVERRANGE
|
||||
OVRRUN EQU $8E ;SERIAL DATA OVERRUN
|
||||
CHKERR EQU $8F ;SERIAL CHECKSUM ERR
|
||||
DERRER EQU $90 ;PERIPHRAL DEVICE ERR
|
||||
BADMOD EQU $91 ;BAD SCREEN MODE #
|
||||
FNCNOT EQU $92 ;NONEXISTANT FUNCTION
|
||||
SCRMEM EQU $93 ;SCREEN MEM TOO SMALL
|
||||
FILENF EQU $AA ;FILE NOT FOUND
|
||||
;
|
||||
; PAGE ZERO RAM ASSIGNMENTS
|
||||
;
|
||||
LNFLG EQU $00 ;LINBUG RAM
|
||||
NGFLAG EQU $01 ;POWER-UP SELF-TEST FLAG
|
||||
;
|
||||
; THESE LOCATIONS NOT CLEARED
|
||||
;
|
||||
CASINI EQU $02 ;CASSETTE INIT LOC
|
||||
RAMLO EQU $04 ;RAM POINTER MEM TST
|
||||
TRAMSZ EQU $06 ;TEMP REG RAM SIZE
|
||||
TSTDAT EQU $07 ;RAM TEST DATA REG
|
||||
;
|
||||
;CLEARED ON COLDSTART ONLY
|
||||
;
|
||||
WARMST EQU $08 ;WARM START FLAG
|
||||
BOOTQ EQU $09 ;SUCCESSFUL BOOT FLG
|
||||
DOSVEC EQU $0A ;DOS START VECTOR
|
||||
DOSINI EQU $0C ;DOS INIT ADDRESS
|
||||
APPMHI EQU $0E ;APPL MEM HI LIMIT
|
||||
;
|
||||
;CLEARED ON COLD OR WARM START
|
||||
;
|
||||
POKMSK EQU $10 ;MASK POKEY IRQ
|
||||
BRKKEY EQU $11 ;BREAK KEY FLAG
|
||||
RTCLOK EQU $12 ;REAL TIME CLOCK
|
||||
BUFADR EQU $15 ;INDIRECT BUFF ADDR
|
||||
ICCOMT EQU $17 ;COMMAND FOR VECTOR
|
||||
DSKFMS EQU $18 ;FMS POINTER
|
||||
DSKUTL EQU $1A ;DISK UTILITIES PTR
|
||||
ABUFPT EQU $1C ;RESERVED
|
||||
ICHIDZ EQU $20 ;HANDLER INDEX #
|
||||
ICDNOZ EQU $21 ;DEVICE NUMBER
|
||||
ICCOMZ EQU $22 ;COMMAND CODE
|
||||
ICSTAZ EQU $23 ;STATUS RETURN
|
||||
ICBALZ EQU $24 ;BUFFER ADDRESS
|
||||
ICBAHZ EQU $25
|
||||
ICPTLZ EQU $26 ;PUT BYTE ROUTINE-1
|
||||
ICPTHZ EQU $27
|
||||
ICBLLZ EQU $28 ;BUFFER LENGTH
|
||||
ICBLHZ EQU $29
|
||||
ICAX1Z EQU $2A ;AUXILIARY BYTES
|
||||
ICAX2Z EQU $2B
|
||||
ICSPRZ EQU $2C ;SPARE BYTES
|
||||
ICIDNO EQU $2E ;IOCB # X 16
|
||||
CIOCHR EQU $2F ;CIO CHARACTER BYTE
|
||||
STATUS EQU $30 ;INTERNAL STATUS
|
||||
CHKSUM EQU $31 ;CHECKSUM
|
||||
BUFRLO EQU $32 ;DATA BUFFER LO BYTE
|
||||
BUFRHI EQU $33 ;DATA BUFFER HI BYTE
|
||||
BFENLO EQU $34 ;NEXT BYTE PAST DATA
|
||||
BFENHI EQU $35 ;BUFFER (HI & LO)
|
||||
LTEMP EQU $36 ;LOADER TEMP
|
||||
BUFRFL EQU $38 ;DATA BUFFR FULL FLG
|
||||
RECVDN EQU $39 ;RECIEVE DONE FLAG
|
||||
XMTDON EQU $3A ;XMIT DONE FLAG
|
||||
CHKSNT EQU $3B ;CHECKSUM SENT FLAG
|
||||
NOCKSM EQU $3C ;NO CHKSUM SENT FLAG
|
||||
;BPTR EQU $3D ;CASSETTE DATA INDEX
|
||||
FTYPE EQU $3E ;INTERRECORD GAP TYPE
|
||||
FEOF EQU $3F ;END OF FILE FLAG
|
||||
FREQ EQU $40 ;BEEP COUNT
|
||||
SOUNDR EQU $41 ;NOISY I/O FLAG
|
||||
CRITIC EQU $42 ;CRITICAL MODE
|
||||
FMSZPG EQU $43 ;FMS ZERO PAGE
|
||||
ZCHAIN EQU $4A ;HANDLER LOADER TEMP
|
||||
DSTAT EQU $4C ;DISPLAY STATUS
|
||||
ATRACT EQU $4D ;ATTRACT FLAG
|
||||
DRKMSK EQU $4E ;DARK ATTRACT MASK
|
||||
COLRSH EQU $4F ;COLOR SHIFTER
|
||||
TMPCHR EQU $50 ;TEMP STORAGE
|
||||
HOLD1 EQU $51 ;TEMP STORAGE
|
||||
LMARGN EQU $52 ;LEFT MARGIN (1)
|
||||
RMARGN EQU $53 ;RIGHT MARGIN (38)
|
||||
ROWCRS EQU $54 ;CURSOR COUNTERS
|
||||
COLCRS EQU $55
|
||||
DINDEX EQU $57 ;DISPLAY MODE #
|
||||
SAVMSC EQU $58 ;SCREEN MEM ADDR
|
||||
OLDROW EQU $5A ;DRAW START POSIT
|
||||
OLDCOL EQU $5B
|
||||
OLDCHR EQU $5D ;DATA UNDER CURSOR
|
||||
OLDADR EQU $5E ;CURSOR MEM ADDR
|
||||
FKDEF EQU $60 ;FUNC KEY DEFEAT POINTER
|
||||
PALNTS EQU $62 ;PAL/NTSC FLAG
|
||||
LOGCOL EQU $63 ;COL IN LOGICAL LINE
|
||||
ADRESS EQU $64 ;TEMP STORAGE
|
||||
MLTEMP EQU $66 ;TEMP STORAGE
|
||||
SAVADR EQU $68 ;TEMP STORAGE
|
||||
RAMTOP EQU $6A ;AVAILABLE RAM PAGES
|
||||
BUFCNT EQU $6B ;BUFFER COUNT
|
||||
BUFSTR EQU $6C ;EDITOR GETCH POINTR
|
||||
BITMSK EQU $6E ;BIT MASK
|
||||
SHFAMT EQU $6F ;PIXEL JUSTIFICATION
|
||||
ROWAC EQU $70 ;ROW ACCUMULATOR
|
||||
COLAC EQU $72 ;COLUMN ACCUMULATOR
|
||||
ENDPT EQU $74 ;LINE LENGTH
|
||||
DELTAR EQU $76 ;DELTA ROW
|
||||
DELTAC EQU $77 ;DELTA COLUMN
|
||||
KEYDEF EQU $79 ;KEY DEFEAT POINTER
|
||||
SWPFLG EQU $7B ;SPLIT SCN CURS CNTL
|
||||
HOLDCH EQU $7C ;KB CHAR TEMP HOLD
|
||||
INSDAT EQU $7D ;TEMP STORAGE
|
||||
COUNTR EQU $7E ;DRAW ITERATION CNT
|
||||
;
|
||||
; 80-FF ARE RESERVED FOR USER
|
||||
;
|
||||
; NOTE: SEE FLOATING POINT
|
||||
; SUBROUTINE AREA FOR ZERO
|
||||
; PAGE CELLS
|
||||
;
|
||||
; PAGE 1 - HARDWARE STACK
|
||||
;
|
||||
; PAGE TWO RAM ASSIGNMENTS
|
||||
;
|
||||
VDSLST EQU $0200 ;DSP LIST NMI VECTOR
|
||||
VPRCED EQU $0202 ;PROCEED IRQ VECTOR
|
||||
VINTER EQU $0204 ;INTERUPT IRQ VECTOR
|
||||
VBREAK EQU $0206 ;BRK INST IRQ VECTOR
|
||||
VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR
|
||||
VSERIN EQU $020A ;POKEY INPUT RDY IRQ
|
||||
VSEROR EQU $020C ;POKEY OUTPUT RDY
|
||||
VSEROC EQU $020E ;POKEY OUTPUT DONE
|
||||
VTIMR1 EQU $0210 ;POKEY TIMER 1 IRQ
|
||||
VTIMR2 EQU $0212 ;POKEY TIMER 2 IRQ
|
||||
VTIMR4 EQU $0214 ;POKEY TIMER 4 IRQ
|
||||
VIMIRQ EQU $0216 ;IMMED IRQ VECTOR
|
||||
CDTMV1 EQU $0218 ;COUNT DOWN TIMER 1
|
||||
CDTMV2 EQU $021A ;COUNT DOWN TIMER 2
|
||||
CDTMV3 EQU $021C ;COUNT DOWN TIMER 3
|
||||
CDTMV4 EQU $021E ;COUNT DOWN TIMER 4
|
||||
CDTMV5 EQU $0220 ;COUNT DOWN TIMER 5
|
||||
VVBLKI EQU $0222 ;IMM VBLK NMI VECTOR
|
||||
VVBLKD EQU $0224 ;DEF VBLK NMI VECTOR
|
||||
CDTMA1 EQU $0226 ;CDTMV1 JSR ADDRESS
|
||||
CDTMA2 EQU $0228 ;CDTMV2 JSR ADDRESS
|
||||
CDTMF3 EQU $022A ;CDTMV3 FLAG
|
||||
SRTIMR EQU $022B ;SOFTWARE REPEAT TMR
|
||||
CDTMF4 EQU $022C ;CDTMV4 FLAG
|
||||
INTEMP EQU $022D ;IAN'S TEMP
|
||||
CDTMF5 EQU $022E ;CDTMV5 FLAG
|
||||
DMACTLS EQU $022F ;SAVE DMACTL REG
|
||||
DLPTRS EQU $0230 ;SAVE DISP LIST LO
|
||||
;SDLSTH EQU $0231 ;SAVE DISP LIST HI
|
||||
SSKCTL EQU $0232 ;SKCTL REGISTER RAM
|
||||
LCOUNT EQU $0233 ;LOADER TEMP
|
||||
LPENH EQU $0234 ;LIGHT PEN HORIZONTAL
|
||||
LPENV EQU $0235 ;LIGHT PEN VERTICAL
|
||||
BRKKY EQU $0236 ;BREAK KEY VECTOR
|
||||
RELADR EQU $0238 ;LOADER REL ADDR
|
||||
CDEVIC EQU $023A ;COMMAND BUFFER-DEV
|
||||
CCOMND EQU $023B ;COMMAND BUFFER-CMND
|
||||
CAUX1 EQU $023C ;COMMAND BUFFER AUX1
|
||||
CAUX2 EQU $023D ;COMMAND BUFFER AUX2
|
||||
;TEMP EQU $023E ;TEMPORARY RAM CELL
|
||||
ERRFLG EQU $023F ;DEVICE ERROR FLAG
|
||||
DFLAGS EQU $0240 ;DISK FLAGS(SECTOR1)
|
||||
DBSECT EQU $0241 ;# DISK BOOT SECTORS
|
||||
BOOTAD EQU $0242 ;DISK BOOT ADDRESS
|
||||
COLDST EQU $0244 ;COLDSTART FLAG 1=CS
|
||||
RECLEN EQU $0245 ;LOADER LENGTH
|
||||
DSKTIM EQU $0246 ;DISK TIME OUT REG
|
||||
VSFLAG EQU $026C ;FINE SCROLL TEMP
|
||||
KEYDIS EQU $026D ;KEY DISABLE FLAG
|
||||
FINE EQU $026E ;FINE SCROLL ENABLE(A1200)
|
||||
GPRIOR EQU $026F ;GLOBAL PRIORITY
|
||||
PADDL0 EQU $0270 ;POT 0 RAM CELL
|
||||
PADDL1 EQU $0271
|
||||
PADDL2 EQU $0272
|
||||
PADDL3 EQU $0273
|
||||
STICK0 EQU $0278 ;JOYSTICK 0 RAM CELL
|
||||
STICK1 EQU $0279
|
||||
PTRIG0 EQU $027C ;PADDLE TRIGGER 0
|
||||
PTRIG1 EQU $027D
|
||||
PTRIG2 EQU $027E
|
||||
PTRIG3 EQU $027F
|
||||
STRIG0 EQU $0284 ;JOYSTICK TRIGGER 0
|
||||
STRIG1 EQU $0285
|
||||
HIBYTE EQU $0288 ;LOADER
|
||||
WMODE EQU $0289 ;CASSETTE R/W MODE
|
||||
BLIM EQU $028A ;CASSETTE RECORD SIZE
|
||||
IMASK EQU $028B
|
||||
JVECK EQU $028C ;JUMP VECTOR
|
||||
NEWADR EQU $028E ;LOADER NEW ADDRESS
|
||||
TXTROW EQU $0290 ;TEXT ROWCRS
|
||||
TXTCOL EQU $0291 ;TEXT COLCRS
|
||||
TINDEX EQU $0293 ;TEXT INDEX
|
||||
TXTMSC EQU $0294 ;TEXT WINDOW MEM ADD
|
||||
TXTOLD EQU $0296 ;TEXT OLDROW & COL
|
||||
CRETRY EQU $029C ;# COMMAND RETRIES
|
||||
HOLD3 EQU $029D
|
||||
SUBTMP EQU $029E
|
||||
HOLD2 EQU $029F
|
||||
DMASK EQU $02A0 ;PIXEL LOCATION MASK
|
||||
TMPLBT EQU $02A1
|
||||
ESCFLG EQU $02A2 ;ESCAPE FLAG
|
||||
TABMAP EQU $02A3 ;TAB STOP MAP
|
||||
LOGMAP EQU $02B2 ;LINE START BIT MAP
|
||||
INVFLG EQU $02B6 ;INVERSE VIDEO FLAG
|
||||
FILFLG EQU $02B7 ;FILL FLAG FOR DRAW
|
||||
TMPROW EQU $02B8
|
||||
TMPCOL EQU $02B9
|
||||
SCRFLG EQU $02BB ;SET IF SCROLLING
|
||||
HOLD4 EQU $02BC ;TEMP USED BY DRAW
|
||||
DRETRY EQU $02BD ;# OF DEVICE RETRIES
|
||||
SHFLOK EQU $02BE ;SHIFT/CTL LOCK FLAG
|
||||
BOTSCR EQU $02BF ;BOTTOM OF SCREEN
|
||||
PCOLR0 EQU $02C0 ;P0 COLOR
|
||||
PCOLR1 EQU $02C1 ;P1 COLOR
|
||||
PCOLR2 EQU $02C2 ;P2 COLOR
|
||||
PCOLR3 EQU $02C3 ;P3 COLOR
|
||||
COLOR0 EQU $02C4 ;COLOR 0
|
||||
COLOR1 EQU $02C5
|
||||
COLOR2 EQU $02C6
|
||||
COLOR3 EQU $02C7
|
||||
COLOR4 EQU $02C8
|
||||
COLBAKS EQU COLOR4
|
||||
RUNADR EQU $02C9 ;LOADER
|
||||
HIUSED EQU $02CB ;LOADER
|
||||
ZHIUSE EQU $02CD ;LOADER
|
||||
GBYTEA EQU $02CF ;LOADER
|
||||
LOADAD EQU $02D1 ;LOADER
|
||||
ZLOADA EQU $02D3 ;LOADER
|
||||
DSCTLN EQU $02D5 ;DISK SECTOR LENGTH
|
||||
ACMISR EQU $02D7 ;RESERVED
|
||||
KRPDEL EQU $02D9 ;KEY REPEAT DELAY
|
||||
KEYREP EQU $02DA ;KEY REPEAT RATE(VBLANKS)
|
||||
NOCLIK EQU $02DB ;CLICK ENABLE/DISABLE
|
||||
HELPFG EQU $02DC ;HELP KEY FLAG
|
||||
DMASAV EQU $02DD ;DMA SAVE STATE
|
||||
PBPNT EQU $02DE ;PRINT BUFFER POINTER
|
||||
PBUFSZ EQU $02DF ;PRINT BUFFER SIZE
|
||||
DOSRUN EQU $02E0 ;DOS RUN/INIT ADDRESSES
|
||||
RAMSIZ EQU $02E4 ;RAM SIZE-HIGH BYTE
|
||||
MEMTOP EQU $02E5 ;TOP OF AVAIL MEMORY
|
||||
MEMLO EQU $02E7 ;BOTTOM OF AVAIL MEM
|
||||
HNDLOD EQU $02E9 ;POLL FLAG (1200)
|
||||
DVSTAT EQU $02EA ;STATUS BUFFER
|
||||
CBAUDL EQU $02EE ;CASSETTE BAUD RATE
|
||||
CBAUDH EQU $02EF
|
||||
CRSINH EQU $02F0 ;CURSOR INHIBIT 0=ON
|
||||
KEYDEL EQU $02F1 ;KEY DELAY
|
||||
CH1 EQU $02F2 ;PRIOR KB CHAR CODE
|
||||
CHACT EQU $02F3 ;CHACTL REGISTER RAM
|
||||
CHBAS EQU $02F4 ;CHBAS REGISTER RAM
|
||||
NEWROW EQU $02F5 ;POINT DRAW GOES TO
|
||||
NEWCOL EQU $02F6
|
||||
ROWINC EQU $02F8 ;ROW INCREMENT VALUE
|
||||
COLINC EQU $02F9 ;COL INCREMENT VALUE
|
||||
CHAR EQU $02FA ;INTERNAL CHAR CODE
|
||||
ATACHR EQU $02FB ;ATASCII CHARACTER
|
||||
CHKEY EQU $02FC ;KB CHAR CODE (FIFO)
|
||||
FILDAT EQU $02FD ;RIGHT FILL DATA
|
||||
DSPFLG EQU $02FE ;DISPLAY FLAG
|
||||
SSFLAG EQU $02FF ;START/STOP FLAG
|
||||
;
|
||||
; PAGE THREE RAM ASSIGNMENTS
|
||||
;
|
||||
DDEVIC EQU $0300 ;BUS I.D. NUMBER
|
||||
DUNIT EQU $0301 ;UNIT NUMBER
|
||||
DCOMND EQU $0302 ;BUS COMMAND
|
||||
DSTATS EQU $0303 ;COMMAND TYPE/STATUS
|
||||
DBUFLO EQU $0304 ;DATA BUFFER LO BYTE
|
||||
DBUFHI EQU $0305 ;DATA BUFFER HI BYTE
|
||||
DTIMLO EQU $0306 ;DEVICE TIMEOUT SECS
|
||||
DUNUSE EQU $0307 ;UNUSED BYTE
|
||||
DBYTLO EQU $0308 ;# OF BYTES XFERRED
|
||||
DBYTHI EQU $0309
|
||||
DAUX1 EQU $030A ;COMMAND AUX BYTE 1
|
||||
DAUX2 EQU $030B ;COMMAND AUX BYTE 2
|
||||
TIMER1 EQU $030C ;INITIAL TIMER VALUE
|
||||
JMPERS EQU $030E ;OPTIONS (1200)
|
||||
CASFLG EQU $030F ;CASSETE MODE IF SET
|
||||
TIMER2 EQU $0310 ;FINAL TIMER VALUE
|
||||
;TEMP1 EQU $0312 ;TEMP STORAGE
|
||||
;TEMP2 EQU $0313 ;TEMP STORAGE
|
||||
PTIMOT EQU $0314 ;PRINTER TIMEOUT REG
|
||||
;TEMP3 EQU $0315 ;TEMP STORAGE
|
||||
SAVIO EQU $0316 ;SAVE SERIAL IN DATA
|
||||
TIMFLG EQU $0317 ;TIMEOUT FLAG C BAUD
|
||||
STACKP EQU $0318 ;SIO STACK PTR SAVE
|
||||
TSTAT EQU $0319 ;TEMP STATUS HOLDER
|
||||
HATABS EQU $031A ;HANDLER ADDR TABLE
|
||||
PUPBT1 EQU $033D ;POWER/UP RESET
|
||||
PUPBT2 EQU $033E
|
||||
PUPBT3 EQU $033F
|
||||
ICHID EQU $0340 ;HANDLER INDEX #
|
||||
ICDNO EQU $0341 ;DEVICE NUMBER
|
||||
ICCOM EQU $0342 ;COMMAND CODE
|
||||
ICSTA EQU $0343 ;STATUS
|
||||
ICBAL EQU $0344 ;BUFFER ADDR LO BYTE
|
||||
ICBAH EQU $0345 ;BUFFER ADDR HI BYTE
|
||||
ICPTL EQU $0346 ;PUT ROUTINE ADDR-1
|
||||
ICPTH EQU $0347
|
||||
ICBLL EQU $0348 ;BUFFER LENGTH LO
|
||||
ICBLH EQU $0349 ;BUFFER LENGTH HI
|
||||
ICAX1 EQU $034A ;AUX BYTE 1
|
||||
ICAX2 EQU $034B ;AUX BYTE 2
|
||||
ICSPR EQU $034C ;SPARE BYTES
|
||||
PRNBUF EQU $03C0 ;PRINTER BUFFER (40 BYTES)
|
||||
SUPERF EQU $03E8 ;SCREEN EDITOR
|
||||
CKEY EQU $03E9 ;START KEY FLAG
|
||||
CASSBT EQU $03EA ;CASSETTE BOOT FLAG
|
||||
CARTCK EQU $03EB ;CARTRIDGE CHECKSUM
|
||||
ACMVAR EQU $03ED ;RESERVED
|
||||
MINTLK EQU $03F9 ;RESERVED
|
||||
GINTLK EQU $03FA ;CART INTERLOCK
|
||||
CHLINK EQU $03FB ;HANDLER CHAIN
|
||||
;
|
||||
; PAGE FOUR RAM ASSIGNMENTS
|
||||
;
|
||||
CASBUF EQU $03FD ;CASSETTE BUFFER (131 BYTES)
|
||||
USAREA EQU $0480 ;USER AREA
|
||||
;
|
||||
; PAGE FIVE AND SIX ARE RESERVED
|
||||
; FOR USER WORK SPACE
|
||||
;
|
||||
; COLLEEN MNEMONICS
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
POKEY EQU $D200
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
; READ
|
||||
;
|
||||
POT0 EQU POKEY+$00
|
||||
POT1 EQU POKEY+$01
|
||||
POT2 EQU POKEY+$02
|
||||
POT3 EQU POKEY+$03
|
||||
POT4 EQU POKEY+$04
|
||||
POT5 EQU POKEY+$05
|
||||
POT6 EQU POKEY+$06
|
||||
POT7 EQU POKEY+$07
|
||||
ALLPOT EQU POKEY+$08
|
||||
KBCODE EQU POKEY+$09
|
||||
RANDOM EQU POKEY+$0a
|
||||
POTGO EQU POKEY+$0b
|
||||
SERIN EQU POKEY+$0d
|
||||
IRQST EQU POKEY+$0e
|
||||
SKSTAT EQU POKEY+$0f
|
||||
;
|
||||
; WRITE
|
||||
;
|
||||
AUDF1 EQU POKEY+$00
|
||||
AUDC1 EQU POKEY+$01
|
||||
AUDF2 EQU POKEY+$02
|
||||
AUDC2 EQU POKEY+$03
|
||||
AUDF3 EQU POKEY+$04
|
||||
AUDC3 EQU POKEY+$05
|
||||
AUDF4 EQU POKEY+$06
|
||||
AUDC4 EQU POKEY+$07
|
||||
AUDCTL EQU POKEY+$08
|
||||
STIMER EQU POKEY+$09
|
||||
SKRES EQU POKEY+$0a
|
||||
SEROUT EQU POKEY+$0d
|
||||
IRQEN EQU POKEY+$0e
|
||||
SKCTL EQU POKEY+$0f
|
||||
;
|
||||
;
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
GTIA EQU $D000
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
; WRITE
|
||||
;
|
||||
HPOSP0 EQU GTIA+$00
|
||||
HPOSP1 EQU GTIA+$01
|
||||
HPOSP2 EQU GTIA+$02
|
||||
HPOSP3 EQU GTIA+$03
|
||||
HPOSM0 EQU GTIA+$04
|
||||
HPOSM1 EQU GTIA+$05
|
||||
HPOSM2 EQU GTIA+$06
|
||||
HPOSM3 EQU GTIA+$07
|
||||
SIZEP0 EQU GTIA+$08
|
||||
SIZEP1 EQU GTIA+$09
|
||||
SIZEP2 EQU GTIA+$0a
|
||||
SIZEP3 EQU GTIA+$0b
|
||||
SIZEM EQU GTIA+$0c
|
||||
GRAFP0 EQU GTIA+$0d
|
||||
GRAFP1 EQU GTIA+$0e
|
||||
GRAFP2 EQU GTIA+$0f
|
||||
GRAFP3 EQU GTIA+$10
|
||||
GRAFM EQU GTIA+$11
|
||||
COLPM0 EQU GTIA+$12
|
||||
COLPM1 EQU GTIA+$13
|
||||
COLPM2 EQU GTIA+$14
|
||||
COLPM3 EQU GTIA+$15
|
||||
COLPF0 EQU GTIA+$16
|
||||
COLPF1 EQU GTIA+$17
|
||||
COLPF2 EQU GTIA+$18
|
||||
COLPF3 EQU GTIA+$19
|
||||
COLBAK EQU GTIA+$1a
|
||||
PRIOR EQU GTIA+$1b
|
||||
VDELAY EQU GTIA+$1c
|
||||
GRACTL EQU GTIA+$1d
|
||||
HITCLR EQU GTIA+$1e
|
||||
CONSOL EQU GTIA+$1f
|
||||
;
|
||||
; READ
|
||||
;
|
||||
M0PF EQU GTIA+$00
|
||||
M1PF EQU GTIA+$01
|
||||
M2PF EQU GTIA+$02
|
||||
M3PF EQU GTIA+$03
|
||||
P0PF EQU GTIA+$04
|
||||
P1PF EQU GTIA+$05
|
||||
P2PF EQU GTIA+$06
|
||||
P3PF EQU GTIA+$07
|
||||
M0PL EQU GTIA+$08
|
||||
M1PL EQU GTIA+$09
|
||||
M2PL EQU GTIA+$0a
|
||||
M3PL EQU GTIA+$0b
|
||||
P0PL EQU GTIA+$0c
|
||||
P1PL EQU GTIA+$0d
|
||||
P2PL EQU GTIA+$0e
|
||||
P3PL EQU GTIA+$0f
|
||||
TRIG0 EQU GTIA+$10
|
||||
TRIG1 EQU GTIA+$11
|
||||
TRIG2 EQU GTIA+$12
|
||||
TRIG3 EQU GTIA+$13
|
||||
PAL EQU GTIA+$14
|
||||
;
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
ANTIC EQU $D400
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
DMACTL EQU ANTIC+$00
|
||||
CHACTL EQU ANTIC+$01
|
||||
DLPTR EQU ANTIC+$02
|
||||
;DLISTH EQU ANTIC+$03
|
||||
HSCROL EQU ANTIC+$04
|
||||
VSCROL EQU ANTIC+$05
|
||||
PMBASE EQU ANTIC+$07
|
||||
CHBASE EQU ANTIC+$09
|
||||
WSYNC EQU ANTIC+$0a
|
||||
VCOUNT EQU ANTIC+$0b
|
||||
PENH EQU ANTIC+$0c
|
||||
PENV EQU ANTIC+$0d
|
||||
NMIEN EQU ANTIC+$0e
|
||||
NMIRES EQU ANTIC+$0f
|
||||
NMIST EQU ANTIC+$0f
|
||||
;
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
PIA EQU $D300
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
PORTA EQU PIA+0
|
||||
PORTB EQU PIA+1
|
||||
PACTL EQU PIA+2
|
||||
PBCTL EQU PIA+3
|
||||
;
|
||||
; ---------------------------------------------------------------------------
|
||||
; Atari ANTIC chip display list equates
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
JUMP EQU $01 ; display list jump instruction (3 byte)
|
||||
JVB EQU $41 ; display list jump and wait for vblank instruction (3)
|
||||
;
|
||||
SCH EQU $10 ; display list horizontal scrolling
|
||||
SCV EQU $20 ; display list vertical scrolling
|
||||
LMS EQU $40 ; display list load memory scan instruction (3 byte)
|
||||
DLII EQU $80 ; display list interrupt instruction
|
||||
;
|
||||
SKIP1 EQU $00 ; display list skip 1 scan line instruction
|
||||
SKIP2 EQU $10 ; display list skip 2 scan lines instruction
|
||||
SKIP3 EQU $20 ; display list skip 3 scan lines instruction
|
||||
SKIP4 EQU $30 ; display list skip 4 scan lines instruction
|
||||
SKIP5 EQU $40 ; display list skip 5 scan lines instruction
|
||||
SKIP6 EQU $50 ; display list skip 6 scan lines instruction
|
||||
SKIP7 EQU $60 ; display list skip 7 scan lines instruction
|
||||
SKIP8 EQU $70 ; display list skip 8 scan lines instruction
|
||||
;
|
||||
MODE2 EQU $02 ; display list mode 2
|
||||
MODE4 EQU $04 ; display list mode 4
|
||||
MODE8 EQU $08 ; display list mode 8
|
||||
MODEE EQU $0E ; display list mode E
|
||||
MODEF EQU $0F ; display list mode F
|
||||
; ---------------------------------------------------------------------------
|
||||
; ENUMS
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
.enum @dmactl
|
||||
blank = %00
|
||||
narrow = %01
|
||||
standard= %10
|
||||
wide = %11
|
||||
missiles= %100
|
||||
players = %1000
|
||||
lineX1 = %10000
|
||||
lineX2 = %00000
|
||||
dma = %100000
|
||||
.ende
|
||||
|
||||
scr48 = @dmactl(wide|dma|players|missiles|lineX1)
|
||||
scr40 = @dmactl(standard|dma|players|missiles|lineX1)
|
||||
scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
|
||||
|
||||
.enum @pmcntl
|
||||
missiles= %1
|
||||
players = %10
|
||||
trigs = %100
|
||||
.ende
|
||||
|
||||
.enum @gtictl
|
||||
prior0 = %0
|
||||
prior1 = %1
|
||||
prior2 = %10
|
||||
prior4 = %100
|
||||
prior8 = %1000
|
||||
ply5 = %10000 ; Fifth Player Enable
|
||||
mlc = %100000 ; Multiple Color Player Enable
|
||||
mode9 = %01000000
|
||||
mode10 = %10000000
|
||||
mode11 = %11000000
|
||||
.ende
|
||||
|
||||
.enum @consol
|
||||
start = %001
|
||||
select = %010
|
||||
option = %100
|
||||
.ende
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; KBCODEs
|
||||
; ---------------------------------------------------------------------------
|
||||
.enum @kbcode
|
||||
_none = 255
|
||||
_esc = 28
|
||||
_1 = 31
|
||||
_2 = 30
|
||||
_3 = 26
|
||||
_4 = 24
|
||||
_5 = 29
|
||||
_6 = 27
|
||||
_7 = 51
|
||||
_8 = 53
|
||||
_9 = 48
|
||||
_0 = 50
|
||||
_lt = 54
|
||||
_gt = 55
|
||||
_del = 52
|
||||
_tab = 44
|
||||
_Q = 47
|
||||
_W = 46
|
||||
_E = 42
|
||||
_R = 40
|
||||
_T = 45
|
||||
_Y = 43
|
||||
_U = 11
|
||||
_I = 13
|
||||
_O = 8
|
||||
_P = 10
|
||||
_min = 14
|
||||
_up = 14 ; cursor function
|
||||
_eq = 15
|
||||
_down = 15 ; cursor function
|
||||
_ret = 12
|
||||
_A = 63
|
||||
_S = 62
|
||||
_D = 58
|
||||
_F = 56
|
||||
_G = 61
|
||||
_H = 57
|
||||
_J = 1
|
||||
_K = 5
|
||||
_L = 0
|
||||
_semicolon = 2
|
||||
_plus = 6
|
||||
_left = 6 ; cursor function
|
||||
_asterisk = 7
|
||||
_right = 7 ; cursor function
|
||||
_caps = 60
|
||||
_Z = 23
|
||||
_X = 22
|
||||
_C = 18
|
||||
_V = 16
|
||||
_B = 21
|
||||
_N = 36
|
||||
_M = 37
|
||||
_comma = 32
|
||||
_dot = 34
|
||||
_slash = 38
|
||||
_atari = 39
|
||||
_help = 17
|
||||
_F1 = 3
|
||||
_F2 = 4
|
||||
_F3 = 19
|
||||
_F4 = 20
|
||||
_space = 33
|
||||
.ende
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; MISCELLANEOUS
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
EOL = $9b
|
||||
CR_PC = 13 ; PC CR code
|
||||
LF_PC = 10 ; PC LF code
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
;-------------------------------------
|
||||
.MACRO ROLW
|
||||
ROL :1
|
||||
ROL :1+1
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO ASLW
|
||||
ASL :1
|
||||
ROL :1+1
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO RORW
|
||||
ROR :1+1
|
||||
ROR :1
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO LSRW
|
||||
LSR :1+1
|
||||
ROR :1
|
||||
.ENDM
|
||||
|
||||
;-------------------------------------
|
||||
.MACRO VMAIN
|
||||
; VMAIN #WORD,interrupt.vector
|
||||
; interrupt.vector:
|
||||
; 0 - VIMIRQ
|
||||
; 1 - TIMCNT1
|
||||
; 2 - TIMCNT2
|
||||
; 3 - TIMCNT3
|
||||
; 4 - TIMCNT4
|
||||
; 5 - TIMCNT5
|
||||
; 6 - VVBLKI
|
||||
; 7 - VVBLKD
|
||||
; 8 - TIMVEC1
|
||||
; 9 - TIMVEC2
|
||||
; Initialises Vertical Blank Interrupts
|
||||
; (works only with system interrupts ON)
|
||||
LDY # <:1
|
||||
LDX # >:1
|
||||
LDA #:2
|
||||
JSR SETVBV
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO VDLI
|
||||
; VDLI #WORD
|
||||
; Initialises Display List Interrupts
|
||||
LDY # <:1
|
||||
LDX # >:1
|
||||
LDA #$C0
|
||||
STY $0200
|
||||
STX $0201
|
||||
STA NMIEN
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO VDL
|
||||
; VDL #WORD
|
||||
; Changes Display List addres
|
||||
; and sets width of the screen
|
||||
; vdl dl,$01 - narrow screen (32 bytes)
|
||||
; vdl dl,$02 - normal screen (40 bytes)
|
||||
; vdl dl,$03 - wide screen (48 bytes)
|
||||
; (works only with system interrupts ON)
|
||||
|
||||
.if %0=2
|
||||
lda dmactls
|
||||
and #$fc
|
||||
ora #%2
|
||||
sta dmactls
|
||||
.endif
|
||||
|
||||
LDA # <%1
|
||||
STA DLPTRS
|
||||
LDA # >%1
|
||||
STA DLPTRS+1
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO halt
|
||||
?stop
|
||||
lda RANDOM
|
||||
and #$05
|
||||
sta COLBAK
|
||||
jmp ?stop
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO KEY
|
||||
; KEY
|
||||
; waits for releasing and pressing "any key"
|
||||
PHA
|
||||
?CK1 LDA SKSTAT
|
||||
AND #$04
|
||||
BEQ ?CK1
|
||||
?CK LDA SKSTAT
|
||||
AND #$04
|
||||
BNE ?CK
|
||||
PLA
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.MACRO WAIT
|
||||
; WAIT
|
||||
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
||||
?ze LDA VCOUNT
|
||||
cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
|
||||
bcc ?ze
|
||||
sbc #10 ; last lines correction
|
||||
?wa cmp VCOUNT
|
||||
bcc ?wa
|
||||
?wf cmp VCOUNT
|
||||
bcs ?wf
|
||||
.ENDM
|
||||
;-------------------------------------
|
||||
.macro waitRTC
|
||||
lda RTCLOK+2
|
||||
?wa cmp RTCLOK+2
|
||||
beq ?wa
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro negw
|
||||
; negate the given word (0-a)
|
||||
;-------------------------------------
|
||||
sec
|
||||
lda #$00
|
||||
sbc :1
|
||||
sta :1
|
||||
lda #$00
|
||||
sbc :1+1
|
||||
sta :1+1
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro randomize
|
||||
;usage: randomize floor ceiling
|
||||
;returns (in A) a random .byte between "floor" and "ceiling"
|
||||
.if :2 < :1
|
||||
.error "floor higher than ceiling"
|
||||
.endif
|
||||
?rand
|
||||
lda random
|
||||
cmp #:2+1-:1 ;ceiling
|
||||
bcs ?rand
|
||||
.if %1>0 ; if floor = 0 - no add offset
|
||||
adc #:1
|
||||
.endif
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro phx
|
||||
txa
|
||||
pha
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro phy
|
||||
tya
|
||||
pha
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro plx
|
||||
pla
|
||||
tax
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro ply
|
||||
pla
|
||||
tay
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro txy
|
||||
txa
|
||||
tay
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro tyx
|
||||
tya
|
||||
tax
|
||||
.endm
|
||||
;-------------------------------------
|
||||
.macro pause
|
||||
;waits :1 number (byte) of frames
|
||||
ldx #:1
|
||||
?PAUSELOOP
|
||||
wait
|
||||
dex
|
||||
bne ?PAUSELOOP
|
||||
.ENDM
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc open
|
||||
;--------------------------------------------------
|
||||
; OPEN #1,4,0,"D:LEVEL000.DAT"
|
||||
|
||||
ldx #$10 ;IOCB #1
|
||||
lda #$03 ;komenda: OPEN
|
||||
sta ICCOM,x
|
||||
lda #<fname ;adres nazwy pliku
|
||||
sta ICBAL,x
|
||||
lda #>fname
|
||||
sta ICBAH,x
|
||||
lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis
|
||||
sta ICAX1,x
|
||||
lda #$00 ;dodatkowy parametr, $00 jest zawsze dobre
|
||||
sta ICAX2,x
|
||||
jmp ciov
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc bget
|
||||
;--------------------------------------------------
|
||||
; BGET #1,LevelFileBuff,LevelFileBuffLen-2
|
||||
|
||||
ldx #$10 ;IOCB #1
|
||||
lda #$07 ;komenda: GET BYTES / BINARY READ
|
||||
sta ICCOM,x
|
||||
lda #<LevelFileBuff ;adres w pamieci, gdzie maja trafic dane
|
||||
sta ICBAL,x
|
||||
lda #>LevelFileBuff
|
||||
sta ICBAH,x
|
||||
lda #<(LevelFileBuffLen-2) ;wielkosc bloku danych w bajtach
|
||||
sta ICBLL,x
|
||||
lda #>(LevelFileBuffLen-2)
|
||||
sta ICBLH,x
|
||||
jmp ciov
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc close
|
||||
;--------------------------------------------------
|
||||
; CLOSE #1
|
||||
ldx #$10 ;IOCB #1
|
||||
lda #$0c ;komenda: CLOSE
|
||||
sta ICCOM,x
|
||||
jmp ciov
|
||||
.endp
|
||||
|
||||
|
||||
.ENDIF
|
||||
+790
@@ -0,0 +1,790 @@
|
||||
;Young lumberjack closure
|
||||
;---------------------------------------------------
|
||||
.IFNDEF TARGET
|
||||
.def TARGET = 800 ; 5200
|
||||
.ENDIF
|
||||
;---------------------------------------------------
|
||||
|
||||
OPT r+ ; saves 10 bytes, and probably works :) https://github.com/tebe6502/Mad-Assembler/issues/10
|
||||
|
||||
;---------------------------------------------------
|
||||
.macro build
|
||||
dta d"0.00" ; number of this build (4 bytes)
|
||||
.endm
|
||||
|
||||
.macro RMTSong
|
||||
lda #:1
|
||||
jsr RMTSongSelect
|
||||
.endm
|
||||
|
||||
;---------------------------------------------------
|
||||
icl 'lib/ATARISYS.ASM'
|
||||
icl 'lib/MACRO.ASM'
|
||||
|
||||
display = $a000
|
||||
.zpvar temp .word = $80
|
||||
.zpvar displayposition .word
|
||||
.zpvar DLI_A DLI_X dliCount .byte
|
||||
.zpvar RMT_blocked noSfx SFX_EFFECT .byte
|
||||
.zpvar AutoPlay .byte ; Auto Play flag ($80 - auto)
|
||||
RMT_zpvars = AutoPlay+1 ; POZOR!!! RMT vars go here
|
||||
;---------------------------------------------------
|
||||
org $2000
|
||||
MODUL
|
||||
ins 'art/muzyka_stripped.rmt',+5 ; my RMT 1.28 on WINE is apparently broken. I lost some hair here (5, not 6)
|
||||
.align $100
|
||||
icl 'art/rmtplayr.a65'
|
||||
;---------------------------------------------------
|
||||
.align $400
|
||||
font
|
||||
ins 'art/Mild West.fnt' ; https://damieng.com/typography/zx-origins/mild-west/
|
||||
dl
|
||||
.by SKIP3
|
||||
dta MODE2+LMS,a(statusBuffer)
|
||||
;.by $80+$50 # fancy shmancy vscroll square pixels
|
||||
;dta $4f+$20,a(display) ;VSCROLL
|
||||
;:((maxlines-1)/2) dta a($2f8f)
|
||||
.by SKIP1+DLII
|
||||
.rept (maxlines-1), #
|
||||
:3 dta MODEF+LMS, a(display+screenBytes*:1)
|
||||
dta MODEF+LMS+DLII, a(display+screenBytes*:1)
|
||||
.endr
|
||||
;----
|
||||
.by MODE2+LMS+SCH ;Hscroll
|
||||
DLracquetAddr0
|
||||
.wo racquetDisp
|
||||
.by JVB
|
||||
.wo dl
|
||||
;---------------------------------------------------
|
||||
;--------------------------------------------------
|
||||
icl 'lib/fileio.asm'
|
||||
;--------------------------------------------------
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc vint
|
||||
;--------------------------------------------------
|
||||
;------------JOY-------------
|
||||
;happy happy joy joy
|
||||
;check for joystick now
|
||||
|
||||
ldy PORTA
|
||||
tya
|
||||
and #$04 ;left
|
||||
bne jNotLeft
|
||||
ldx racquetPos
|
||||
cpx #racquetPosMin+1
|
||||
bcc jNotLeft
|
||||
dex
|
||||
stx racquetPos
|
||||
|
||||
jNotLeft
|
||||
tya
|
||||
and #$08 ;right
|
||||
bne jNotRight
|
||||
ldx racquetPos
|
||||
cpx #racquetPosMax
|
||||
bcs jNotRight
|
||||
inx
|
||||
stx racquetPos
|
||||
jNotRight
|
||||
/*
|
||||
;fire
|
||||
lda TRIG0
|
||||
bne JNotFire
|
||||
...
|
||||
JNotFire
|
||||
*/
|
||||
|
||||
;lda racquetPos
|
||||
|
||||
sec
|
||||
lda #screenWidth-1
|
||||
sbc racquetPos
|
||||
lsr
|
||||
clc
|
||||
adc #<racquetDisp
|
||||
sta dlracquetAddr0
|
||||
lda #>racquetDisp
|
||||
adc #0
|
||||
sta dlracquetAddr0+1
|
||||
|
||||
lda racquetPos
|
||||
lsr
|
||||
and #$01
|
||||
;sta HSCROL
|
||||
|
||||
/* ;pos print
|
||||
lda racquetPos
|
||||
:4 lsr
|
||||
clc
|
||||
adc #'0'
|
||||
sta hexDump
|
||||
|
||||
lda racquetPos
|
||||
and #$0F
|
||||
clc
|
||||
adc #'0'
|
||||
sta hexDump+1
|
||||
*/
|
||||
|
||||
mva #0 dliCount
|
||||
; mva #13 VSCROL ; FOX gfx mode only
|
||||
|
||||
/*
|
||||
bit RMT_blocked
|
||||
bmi SkipRMTVBL
|
||||
; ------- RMT -------
|
||||
lda sfx_effect
|
||||
bmi lab2
|
||||
asl @ ; * 2
|
||||
tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126)
|
||||
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
|
||||
lda #0 ;A = 0 note (0..60)
|
||||
bit noSfx
|
||||
smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
||||
|
||||
lda #$ff
|
||||
sta sfx_effect ;reinit value
|
||||
lab2
|
||||
jsr RASTERMUSICTRACKER+3 ;1 play
|
||||
; ------- RMT -------
|
||||
SkipRMTVBL
|
||||
|
||||
*/
|
||||
;sfx
|
||||
lda sfx_effect
|
||||
bmi lab2
|
||||
asl ; * 2
|
||||
tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126)
|
||||
ldx #3 ;X = 3 channel (0..3 or 0..7 for stereo module)
|
||||
lda #12 ;A = 12 note (0..60)
|
||||
jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
||||
;
|
||||
lda #$ff
|
||||
sta sfx_effect ;reinit value
|
||||
;
|
||||
lab2
|
||||
jsr RASTERMUSICTRACKER+3
|
||||
skipSoundFrame
|
||||
|
||||
jmp XITVBV
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc DLI
|
||||
;--------------------------------------------------
|
||||
rti
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
main
|
||||
;--------------------------------------------------
|
||||
jsr wait_for_depress
|
||||
jsr MakeDarkScreen
|
||||
jsr initialize
|
||||
RMTsong song_main_menu
|
||||
jsr StartScreen
|
||||
jsr MakeDarkScreen
|
||||
|
||||
mva #$0 AutoPlay
|
||||
jsr ScoreClear
|
||||
mva #"5" Lives
|
||||
jsr clearscreen
|
||||
mva #$0 LevelType
|
||||
jsr LoadLevelData.level000 ; set visible number to 000
|
||||
jsr BuildLevelFromBuffer
|
||||
jsr LevelScreen
|
||||
RMTSong song_ingame
|
||||
gameloop
|
||||
jsr initialize.ClearTables
|
||||
jsr MainScreen
|
||||
jsr PlayLevel
|
||||
bit EndLevelFlag ; reason for end level
|
||||
bmi EndOfLife ; end of life :)
|
||||
; end of level (level up)
|
||||
jsr MakeDarkScreen
|
||||
jsr NextLevel
|
||||
jsr LevelScreen
|
||||
; RMTSong song_ingame
|
||||
jsr AudioInit ; after I/O
|
||||
jmp gameloop
|
||||
EndOfLife
|
||||
dec Lives ; decrease Lives
|
||||
lda Lives
|
||||
cmp #"0"
|
||||
beq gameOver ; if no lives - game over
|
||||
jsr NextLife
|
||||
jmp gameloop
|
||||
gameOver
|
||||
;game over
|
||||
RMTSong song_game_over
|
||||
jsr HiScoreCheckWrite
|
||||
jsr GameOverScreen
|
||||
@ lda RANDOM
|
||||
and #%00001110
|
||||
sta COLPF0
|
||||
lda CONSOL
|
||||
and #@consol(start) ; START
|
||||
beq main
|
||||
lda TRIG0 ; fire
|
||||
jeq main
|
||||
jmp @-
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc StartScreen
|
||||
;--------------------------------------------------
|
||||
jsr MakeDarkScreen
|
||||
mva #$ff AutoPlay
|
||||
sta LevelType ; Title
|
||||
mva #"9" Lives
|
||||
jsr clearscreen
|
||||
jsr BuildLevelFromBuffer
|
||||
mwa #dl_start dlptrs
|
||||
lda #$0 ;+GTIACTLBITS
|
||||
sta GPRIOR
|
||||
sta COLBAKS
|
||||
lda #@dmactl(standard|dma) ; normal screen width, DL on, P/M off
|
||||
sta dmactls
|
||||
pause 1
|
||||
StartLoop
|
||||
jsr PlayLevel
|
||||
bit EndLevelFlag ; reason for end level
|
||||
bmi EndOfStartScreen
|
||||
; end of level (level up)
|
||||
jsr NextLevel
|
||||
jmp StartLoop
|
||||
EndOfStartScreen
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc NextLife
|
||||
;--------------------------------------------------
|
||||
ldy #maxBalls
|
||||
sty eXistenZstackPtr
|
||||
;OK, one ball starts!
|
||||
lda eXistenZstack,Y
|
||||
dey
|
||||
sty eXistenZstackPtr
|
||||
tax
|
||||
jsr randomStart ;just one random pixxxel
|
||||
;previously the whole band of ballz
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc NextLevel
|
||||
;--------------------------------------------------
|
||||
lda LevelType
|
||||
beq level000
|
||||
bmi levelTitle
|
||||
; load level from disk
|
||||
loadNext
|
||||
jsr FileUp
|
||||
jsr LoadLevelData
|
||||
levelTitle
|
||||
jsr clearscreen
|
||||
jsr BuildLevelFromBuffer
|
||||
jsr initialize.ClearTables
|
||||
rts ; start level
|
||||
level000
|
||||
mva #1 LevelType ; switch to files
|
||||
; reset file number to 000
|
||||
ldx #2
|
||||
@ lda StartLevelNumber,x
|
||||
sta LevelNumber,x
|
||||
dex
|
||||
bpl @-
|
||||
jmp loadNext
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc LevelScreen
|
||||
;--------------------------------------------------
|
||||
jsr MakeDarkScreen
|
||||
ldx #2
|
||||
@ lda LevelNumber,x
|
||||
sec
|
||||
sbc #$20
|
||||
sta LevelText+16,x
|
||||
dex
|
||||
bpl @-
|
||||
mwa #dl_level dlptrs
|
||||
lda #@dmactl(standard|dma) ; normal screen width, DL on, P/M off
|
||||
sta dmactls
|
||||
pause 100
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc GameOverScreen
|
||||
;--------------------------------------------------
|
||||
jsr MakeDarkScreen
|
||||
ldx #5
|
||||
@ lda score,x
|
||||
sta OverText+33,x
|
||||
dex
|
||||
bpl @-
|
||||
mwa #dl_over dlptrs
|
||||
lda #%00110010 ; normal screen width, DL on, P/M off
|
||||
sta dmactls
|
||||
pause 20
|
||||
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc MainScreen
|
||||
;--------------------------------------------------
|
||||
jsr MakeDarkScreen
|
||||
mwa #dl dlptrs
|
||||
lda #$0 ;+GTIACTLBITS
|
||||
sta GPRIOR
|
||||
sta COLBAKS
|
||||
lda #@dmactl(standard|dma) ; normal screen width, DL on, P/M off
|
||||
sta dmactls
|
||||
pause 1
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc MakeDarkScreen
|
||||
;--------------------------------------------------
|
||||
mva #0 dmactls ; dark screen
|
||||
; and wait one frame :)
|
||||
pause 1
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc PlayLevel
|
||||
;--------------------------------------------------
|
||||
loop
|
||||
|
||||
; PUT GAME HERE
|
||||
|
||||
dec currBall
|
||||
jpl flight
|
||||
|
||||
|
||||
pause 1 ;all balls
|
||||
bit AutoPlay
|
||||
bpl NoAuto
|
||||
pause 1 ;additional pause if auto play mode (slower)
|
||||
lda CONSOL
|
||||
and #@consol(start) ; START
|
||||
beq LevelOver ; Start pressed in Auto Play - exit
|
||||
lda TRIG0
|
||||
beq LevelOver
|
||||
|
||||
NoAuto
|
||||
lda eXistenZstackPtr
|
||||
cmp #maxBalls
|
||||
jne loop
|
||||
LevelOver
|
||||
; level over
|
||||
mva #$ff EndLevelFlag
|
||||
jsr wait_for_depress
|
||||
rts
|
||||
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc ScoreUp
|
||||
;--------------------------------------------------
|
||||
inc score+5
|
||||
lda score+5
|
||||
cmp #"9"+1 ; 9+1 character code
|
||||
bne ScoreReady
|
||||
lda #"0" ; 0 character code
|
||||
sta score+5
|
||||
inc score+4
|
||||
lda score+4
|
||||
cmp #"9"+1 ; 9+1 character code
|
||||
bne ScoreReady
|
||||
lda #"0" ; 0 character code
|
||||
sta score+4
|
||||
inc score+3
|
||||
lda score+3
|
||||
cmp #"9"+1 ; 9+1 character code
|
||||
bne ScoreReady
|
||||
lda #"0" ; 0 character code
|
||||
sta score+3
|
||||
inc score+2
|
||||
; bonus !!! :)
|
||||
lda Lives
|
||||
cmp #"9"
|
||||
beq noLivesUP
|
||||
inc Lives
|
||||
mva #05 sfx_effect
|
||||
mva #$ff COLBAKS
|
||||
pause 2 ; sorry
|
||||
inc COLBAKS
|
||||
noLivesUP
|
||||
;----------
|
||||
lda score+2
|
||||
cmp #"9"+1 ; 9+1 character code
|
||||
bne ScoreReady
|
||||
lda #"0" ; 0 character code
|
||||
sta score+2
|
||||
inc score+1
|
||||
lda score+1
|
||||
cmp #"9"+1 ; 9+1 character code
|
||||
bne ScoreReady
|
||||
lda #"0" ; 0 character code
|
||||
sta score+1
|
||||
inc score
|
||||
ScoreReady
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc ScoreClear
|
||||
;--------------------------------------------------
|
||||
lda #"0"
|
||||
ldx #4
|
||||
@ sta score,x
|
||||
dex
|
||||
bpl @-
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc HiScoreCheckWrite
|
||||
; It checks if the score is greater than hiscore.
|
||||
; If yes - rewrites the score to hiscore.
|
||||
;--------------------------------------------------
|
||||
lda HiScore
|
||||
cmp score
|
||||
bcc higher1
|
||||
bne lower
|
||||
lda HiScore+1
|
||||
cmp score+1
|
||||
bcc higher2
|
||||
bne lower
|
||||
lda HiScore+2
|
||||
cmp score+2
|
||||
bcc higher3
|
||||
bne lower
|
||||
lda HiScore+3
|
||||
cmp score+3
|
||||
bcc higher4
|
||||
bne lower
|
||||
lda HiScore+4
|
||||
cmp score+4
|
||||
bcc higher5
|
||||
bne lower
|
||||
lda HiScore+5
|
||||
cmp score+5
|
||||
bcc higher6
|
||||
lower
|
||||
rts
|
||||
higher1
|
||||
lda score
|
||||
sta HiScore
|
||||
higher2
|
||||
lda score+1
|
||||
sta HiScore+1
|
||||
higher3
|
||||
lda score+2
|
||||
sta HiScore+2
|
||||
higher4
|
||||
lda score+3
|
||||
sta HiScore+3
|
||||
higher5
|
||||
lda score+4
|
||||
sta HiScore+4
|
||||
higher6
|
||||
lda score+5
|
||||
sta HiScore+5
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc clearScreen
|
||||
;--------------------------------------------------
|
||||
lda #0
|
||||
tax
|
||||
@
|
||||
:(maxLines*40/256+1) sta display+$100*#,x
|
||||
inx
|
||||
bne @-
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc AudioInit
|
||||
;--------------------------------------------------
|
||||
; pokeys init
|
||||
lda #3
|
||||
sta skctl ; put Pokey into Init
|
||||
sta skctl+$10
|
||||
ldx #8
|
||||
lda #0
|
||||
@
|
||||
sta $D200,x ; clear all voices, set AUDCTL to 00
|
||||
sta $D210,x ; clear all voices, set AUDCTL to 00
|
||||
dex
|
||||
bpl @-
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc initialize
|
||||
;--------------------------------------------------
|
||||
|
||||
mva #>font CHBAS
|
||||
mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0
|
||||
|
||||
mva #$7C COLBAKS
|
||||
|
||||
mva #screenWidth/2-racquetSize/4 racquetPos
|
||||
|
||||
mva #0 dliCount
|
||||
sta RMT_blocked
|
||||
|
||||
lda #$ff
|
||||
sta sfx_effect
|
||||
|
||||
JSR AudioInit
|
||||
|
||||
;RMT INIT
|
||||
ldx #<MODUL ;low byte of RMT module to X reg
|
||||
ldy #>MODUL ;hi byte of RMT module to Y reg
|
||||
lda #0 ;starting song line 0-255 to A reg
|
||||
jsr RASTERMUSICTRACKER ;Init
|
||||
|
||||
|
||||
lda #@dmactl(standard|dma)
|
||||
sta dmactls
|
||||
mwa #dl dlptrs
|
||||
vdli DLI
|
||||
|
||||
ClearTables
|
||||
jsr cyclecolorsReset
|
||||
mwa #clear_vars_start temp
|
||||
ldy #0
|
||||
@
|
||||
tya
|
||||
sta (temp),y
|
||||
inw temp
|
||||
cpw temp #clear_vars_end
|
||||
bne @-
|
||||
|
||||
|
||||
|
||||
;VBI
|
||||
|
||||
vmain vint,7
|
||||
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc FileUp
|
||||
;--------------------------------------------------
|
||||
inc LevelNumber+2
|
||||
lda LevelNumber+2
|
||||
cmp #'9'+1 ; 9+1 character code
|
||||
bne NumberReady
|
||||
lda #'0' ; 0 character code
|
||||
sta LevelNumber+2
|
||||
inc LevelNumber+1
|
||||
lda LevelNumber+1
|
||||
cmp #'9'+1 ; 9+1 character code
|
||||
bne NumberReady
|
||||
lda #'0' ; 0 character code
|
||||
sta LevelNumber+1
|
||||
inc LevelNumber
|
||||
NumberReady
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc LoadLevelData
|
||||
;--------------------------------------------------
|
||||
lda LevelType
|
||||
beq level000
|
||||
bmi levelTitle
|
||||
; load level from disk
|
||||
; prepare number in filename
|
||||
ldx #2
|
||||
@ lda LevelNumber,x
|
||||
sta fname+7,x
|
||||
dex
|
||||
bpl @-
|
||||
; clear buffer
|
||||
mwa #LevelFileBuff temp
|
||||
ldy #0
|
||||
@ tya
|
||||
sta (temp),y
|
||||
inw temp
|
||||
cpw temp #LevelFileBuffEnd
|
||||
bne @-
|
||||
; try to load file
|
||||
jsr close
|
||||
jsr open
|
||||
bmi open_error
|
||||
jsr bget
|
||||
bmi bget_error
|
||||
go_close jsr close
|
||||
rts
|
||||
bget_error
|
||||
cpy #136 ; EOF
|
||||
beq go_close
|
||||
open_error
|
||||
mva #0 LevelType ; set level to internal 000
|
||||
level000
|
||||
; reset file number to 000
|
||||
ldx #2
|
||||
@ lda StartLevelNumber,x
|
||||
sta LevelNumber,x
|
||||
dex
|
||||
bpl @-
|
||||
levelTitle
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc displaydec5 ;decimal (word), displayposition (word)
|
||||
;--------------------------------------------------
|
||||
; displays decimal number as in parameters (in text mode)
|
||||
; leading zeroes are removed
|
||||
; the range is (00000..65565 - two bytes)
|
||||
|
||||
ldy #4 ; there will be 5 digits
|
||||
NextDigit
|
||||
ldx #16 ; 16-bit dividee so Rotate 16 times
|
||||
lda #$00
|
||||
Rotate000
|
||||
aslw decimal
|
||||
rol ; scroll dividee
|
||||
; (as highest byte - additional - byte is A)
|
||||
cmp #10 ; divider
|
||||
bcc TooLittle000 ; if A is smaller than divider
|
||||
; there is nothing to substract
|
||||
sbc #10 ; divider
|
||||
inc decimal ; lowest bit set to 1
|
||||
; because it is 0 and this is the fastest way
|
||||
TooLittle000 dex
|
||||
bne Rotate000 ; and Rotate 16 times, Result will be in decimal
|
||||
tax ; and the rest in A
|
||||
; (and it goes to X because
|
||||
; it is our decimal digit)
|
||||
lda digits,x
|
||||
sta decimalresult,y
|
||||
dey
|
||||
bpl NextDigit ; Result again /10 and we have next digit
|
||||
|
||||
;rightnumber
|
||||
; displaying without leading zeroes (if zeroes exist then display space at this position)
|
||||
ldy #0
|
||||
ldx #0 ; digit flag (cut leading zeroes)
|
||||
displayloop
|
||||
lda decimalresult,y
|
||||
cpx #0
|
||||
bne noleading0
|
||||
cpy #4
|
||||
beq noleading0 ; if 00000 - last 0 must stay
|
||||
cmp zero
|
||||
bne noleading0
|
||||
lda #space
|
||||
beq displaychar ; space = 0 !
|
||||
noleading0
|
||||
inx ; set flag (no leading zeroes to cut)
|
||||
displaychar
|
||||
sta (displayposition),y
|
||||
nexdigit
|
||||
iny
|
||||
cpy #5
|
||||
bne displayloop
|
||||
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc RmtSongSelect
|
||||
; starting song line 0-255 to A reg
|
||||
;--------------------------------------------------
|
||||
/*
|
||||
cmp #song_main_menu
|
||||
beq noingame ; noMusic blocks only ingame songs
|
||||
bit noMusic
|
||||
spl:lda #song_silencio
|
||||
noingame
|
||||
*/
|
||||
mvx #$ff RMT_blocked
|
||||
ldx #<MODUL ; low byte of RMT module to X reg
|
||||
ldy #>MODUL ; hi byte of RMT module to Y reg
|
||||
jsr RASTERMUSICTRACKER ; Init
|
||||
mva #0 RMT_blocked
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc wait_for_depress ; ion
|
||||
;--------------------------------------------------
|
||||
lda CONSOL
|
||||
and:cmp #%00000111
|
||||
bne wait_for_depress
|
||||
lda TRIG0
|
||||
beq wait_for_depress
|
||||
rts
|
||||
.endp
|
||||
LevelType
|
||||
.byte 0 ; level type $00 - first level, $01 - level from buffer, $ff - title screen
|
||||
Numbers
|
||||
.byte '0123456789'
|
||||
digits
|
||||
zero
|
||||
.byte "0123456789"
|
||||
space = 0
|
||||
.byte " "
|
||||
decimal
|
||||
.word 0
|
||||
decimalresult
|
||||
.byte " "
|
||||
lineAdrL
|
||||
:margin .byte <marginLine ;8 lines of margin space
|
||||
:maxLines .byte <(display+screenBytes*#)
|
||||
:256-maxLines-1*margin .by <marginLine ; (display+40*#) ;just to let the plot smear on full .byte ypos
|
||||
lineAdrH
|
||||
:margin .byte >marginLine
|
||||
:maxLines .byte >(display+screenBytes*#)
|
||||
:256-maxLines-1*margin .by >marginLine ; (display+40*#) ;just to let the plot smear on full .byte ypos
|
||||
bittable
|
||||
.byte %11110000
|
||||
debittable
|
||||
.byte %00001111
|
||||
.byte %11110000
|
||||
RNColtable ; Right Nibble color Table
|
||||
.byte %00000000
|
||||
.byte %00000001
|
||||
.byte %00000010
|
||||
.byte %00000011
|
||||
.byte %00000100
|
||||
.byte %00000101
|
||||
.byte %00000110
|
||||
.byte %00000111
|
||||
.byte %00001000
|
||||
LNColtable ; Left Nibble color Table
|
||||
.byte %00000000
|
||||
.byte %00010000
|
||||
.byte %00100000
|
||||
.byte %00110000
|
||||
.byte %01000000
|
||||
.byte %01010000
|
||||
.byte %01100000
|
||||
.byte %01110000
|
||||
.byte %10000000
|
||||
;--------------------------------
|
||||
clear_vars_start
|
||||
; PUT VARS HERE
|
||||
clear_vars_end
|
||||
;--------------------------------
|
||||
statusBar
|
||||
dta d"rc$"
|
||||
hexDump
|
||||
dta d" dx$"
|
||||
dxDisp
|
||||
dta d" dy$"
|
||||
dyDisp
|
||||
dta d" balls$"
|
||||
ballDisp
|
||||
dta d" "
|
||||
marginLine .ds screenBytes
|
||||
;--------------------------------
|
||||
; names of RMT instruments (sfx)
|
||||
;--------------------------------
|
||||
sfx_ping = $07
|
||||
sfx_pong = $08
|
||||
;--------------------------------
|
||||
; RMT songs (lines)
|
||||
;--------------------------------
|
||||
song_main_menu = $00
|
||||
song_ingame = $07
|
||||
song_game_over = $12
|
||||
|
||||
|
||||
RUN main
|
||||
Reference in New Issue
Block a user