diff --git a/dino.asm b/dino.asm index 827b7c4..6279894 100644 --- a/dino.asm +++ b/dino.asm @@ -31,6 +31,9 @@ swap_table=$0600 ; table for swap bytes in left characters :) ;--------------------------------------------------- .IF ALONE =1 ; dark screean and BASIC off + org $2000 +PLAYER + icl 'music/playlzs16.asm' ; Music Player ORG $3000 mva #0 dmactls ; dark screen mva #$ff portb @@ -39,12 +42,22 @@ swap_table=$0600 ; table for swap bytes in left characters :) mva #$ff portb ; BASIC off rts ini $3000 + .else + PLAYER = $2000 + INIT_SONG = PLAYER+3 + org $e0 +song_start_ptr .ds 2 +song_end_ptr .ds 2 +chn_copy .ds 9 +chn_pos .ds 9 +bptr .ds 2 +cur_pos .ds 1 +chn_bits .ds 1 + +bit_data .ds 1 + .ENDIF ;--------------------------------------------------- - org $2000 -PLAYER - icl 'music/playlzs16.asm' ; Music Player - org $3000 PMgraph org PMGraph+$800 ; P/M graphics for clouds diff --git a/dino.xex b/dino.xex index 97b85c0..c0d02af 100644 Binary files a/dino.xex and b/dino.xex differ diff --git a/intro/samples.txt b/intro/samples.txt deleted file mode 100644 index 6ddd2f3..0000000 --- a/intro/samples.txt +++ /dev/null @@ -1,13 +0,0 @@ -1 -2 -3 -2 -4 -2 -5 -2 -3 -2 -4 -2 -6 diff --git a/intro/tech_diff.asm b/intro/tech_diff.asm index e6ee62c..ae0e9fd 100644 --- a/intro/tech_diff.asm +++ b/intro/tech_diff.asm @@ -12,11 +12,18 @@ icl '../lib/ATARISYS.ASM' icl '../lib/MACRO.ASM' ;--------------------------------------------------- + ;BASIC OFF + ORG $3000 + mva #0 dmactls ; dark screen + ; and wait one frame :) + waitRTC + mva #$ff portb ; BASIC off + rts + ini $3000 org $2000 PLAYER icl '../music/playlzs16.asm' ; Music Player ;--------------------------------------------------- - ; BASIC off ORG $2c00 start1 mva #$ff portb @@ -139,9 +146,6 @@ leet_speeks_h .by >leet_speek2 .by >leet_speek3 .by >leet_speek4 -leet_screen - .ds 32*9 -leet_screen_end ;-------------------------------------------------- .proc PlayMusic mwa #MUSIC_DATA song_start_ptr @@ -152,20 +156,25 @@ leet_screen_end .endp .proc StopMusic VMAIN XITVBV,7 ; jsr SetVBL + waitRTC + ldx #8 + lda #0 +@ sta POKEY,x + sta POKEY+$10,x + dex + bpl @- rts .endp .proc VBLinterrupt jsr PLAYER - pla - tay - pla - tax - pla - rti + jmp XITVBV .endp +leet_screen + .ds 32*9 +leet_screen_end .align $100 MUSIC_DATA - ins '../music/Title.lzss' ; title music + ins '../music/title.lzss' ; title music MUSIC_DATA_END ini start1 @@ -189,7 +198,11 @@ start mva #0 COLOR2 sta COLBAK mva #15 COLOR1 - POKEY_INIT + ;POKEY_INIT + mva #0 AUDCTL + sta AUDCTL+$10 + mva #3 SKSTAT + sta SKSTAT+$10 pause 3 lda #0 sta $d40e ; NMI OFF @@ -232,15 +245,15 @@ please_wait_loop bne exit_tech_diff sta wsync ;------------ lda TRIG0 - beq exit_tech_diff + beq exit_tech_diff sta wsync ;------------ tya and #$0F ora #$10 - sta AUDC1 - sta AUDC2 - sta AUDC3 + sta AUDC1+$10 ;pseudo stereo + sta AUDC2+$10 + sta AUDC3+$10 ;sta AUDC4 @@ -250,11 +263,12 @@ please_wait_loop sta wsync beq @+ sta wsync + jmp @- @ inx - cpx #11 - sne:ldx #1 + cpx #11 ; track length + sne:ldx #1 ; jump to second sample jmp please_wait_loop exit_tech_diff @@ -277,8 +291,17 @@ exit_tech_diff cli ; IRQ on mva #0 DMACTLS sta dmactl - rts + ;jmp quiet ; rts +.proc quiet + ldx #8 + lda #0 +@ sta POKEY,x + sta POKEY+$10,x + dex + bpl @- + rts +.endp sample1 ins 'wait1.wav.bin' sample_end1 diff --git a/intro/tech_diff.lab b/intro/tech_diff.lab deleted file mode 100644 index 2fcfd5e..0000000 --- a/intro/tech_diff.lab +++ /dev/null @@ -1,653 +0,0 @@ -mads 2.1.7 build 3 (13 Sep 23) -Label table: -00 E400 EDITRV -00 E410 SCRENV -00 E420 KEYBDV -00 E430 PRINTV -00 E440 CASETV -00 E450 DISKIV -00 E453 DSKINV -00 E456 CIOV -00 E459 SIOV -00 E45C SETVBV -00 E45F SYSVBV -00 E462 XITVBV -00 E465 SIOINV -00 E468 SENDEV -00 E46B INTINV -00 E46E CIOINV -00 E471 BLKBDV -00 E474 WARMSV -00 E477 COLDSV -00 E47A RBLOKV -00 E47D CSOPIV -00 E480 PUPDIV -00 E483 SLFTSV -00 E486 PHENTV -00 E489 PHULNV -00 E48C PHINIV -00 0003 _OPEN -00 0005 GETREC -00 0007 GETCHR -00 0009 PUTREC -00 000B PUTCHR -00 000C _CLOSE -00 000D STATIS -00 000E SPECIL -00 0011 DRAWLN -00 0012 FILLIN -00 0020 RENAME -00 0021 DELETE -00 0022 FORMAT -00 0023 LOCKFL -00 0024 UNLOCK -00 0025 POINT -00 0026 NOTE -00 00FF IOCFRE -00 0001 APPEND -00 0002 DIRECT -00 0004 OPNIN -00 0008 OPNOT -00 000C OPNINO -00 0010 MXDMOD -00 0020 INSCLR -00 0045 SCREDT -00 004B KBD -00 0053 DISPLY -00 0050 PRINTR -00 0043 CASSET -00 0052 RS232 -00 0044 DISK -00 0001 SUCCES -00 0080 BRKABT -00 0081 PRVOPN -00 0082 NONDEV -00 0083 WRONLY -00 0084 NVALID -00 0085 NOTOPN -00 0086 BADIOC -00 0087 RDONLY -00 0088 EOFERR -00 0089 TRNRCD -00 008A TIMOUT -00 008B DNACK -00 008C FRMERR -00 008D CRSROR -00 008E OVRRUN -00 008F CHKERR -00 0090 DERRER -00 0091 BADMOD -00 0092 FNCNOT -00 0093 SCRMEM -00 00AA FILENF -00 0000 LNFLG -00 0001 NGFLAG -00 0002 CASINI -00 0004 RAMLO -00 0006 TRAMSZ -00 0007 TSTDAT -00 0008 WARMST -00 0009 BOOTQ -00 000A DOSVEC -00 000C DOSINI -00 000E APPMHI -00 0010 POKMSK -00 0011 BRKKEY -00 0012 RTCLOK -00 0015 BUFADR -00 0017 ICCOMT -00 0018 DSKFMS -00 001A DSKUTL -00 001C ABUFPT -00 0020 ICHIDZ -00 0021 ICDNOZ -00 0022 ICCOMZ -00 0023 ICSTAZ -00 0024 ICBALZ -00 0025 ICBAHZ -00 0026 ICPTLZ -00 0027 ICPTHZ -00 0028 ICBLLZ -00 0029 ICBLHZ -00 002A ICAX1Z -00 002B ICAX2Z -00 002C ICSPRZ -00 002E ICIDNO -00 002F CIOCHR -00 0030 STATUS -00 0031 CHKSUM -00 0032 BUFRLO -00 0033 BUFRHI -00 0034 BFENLO -00 0035 BFENHI -00 0036 LTEMP -00 0038 BUFRFL -00 0039 RECVDN -00 003A XMTDON -00 003B CHKSNT -00 003C NOCKSM -00 003E FTYPE -00 003F FEOF -00 0040 FREQ -00 0041 SOUNDR -00 0042 CRITIC -00 0043 FMSZPG -00 004A ZCHAIN -00 004C DSTAT -00 004D ATRACT -00 004E DRKMSK -00 004F COLRSH -00 0050 TMPCHR -00 0051 HOLD1 -00 0052 LMARGN -00 0053 RMARGN -00 0054 ROWCRS -00 0055 COLCRS -00 0057 DINDEX -00 0058 SAVMSC -00 005A OLDROW -00 005B OLDCOL -00 005D OLDCHR -00 005E OLDADR -00 0060 FKDEF -00 0062 PALNTS -00 0063 LOGCOL -00 0064 ADRESS -00 0066 MLTEMP -00 0068 SAVADR -00 006A RAMTOP -00 006B BUFCNT -00 006C BUFSTR -00 006E BITMSK -00 006F SHFAMT -00 0070 ROWAC -00 0072 COLAC -00 0074 ENDPT -00 0076 DELTAR -00 0077 DELTAC -00 0079 KEYDEF -00 007B SWPFLG -00 007C HOLDCH -00 007D INSDAT -00 007E COUNTR -00 0200 VDSLST -00 0202 VPRCED -00 0204 VINTER -00 0206 VBREAK -00 0208 VKEYBD -00 020A VSERIN -00 020C VSEROR -00 020E VSEROC -00 0210 VTIMR1 -00 0212 VTIMR2 -00 0214 VTIMR4 -00 0216 VIMIRQ -00 0218 CDTMV1 -00 021A CDTMV2 -00 021C CDTMV3 -00 021E CDTMV4 -00 0220 CDTMV5 -00 0222 VVBLKI -00 0224 VVBLKD -00 0226 CDTMA1 -00 0228 CDTMA2 -00 022A CDTMF3 -00 022B SRTIMR -00 022C CDTMF4 -00 022D INTEMP -00 022E CDTMF5 -00 022F DMACTLS -00 0230 DLPTRS -00 0232 SSKCTL -00 0233 LCOUNT -00 0234 LPENH -00 0235 LPENV -00 0236 BRKKY -00 0238 RELADR -00 023A CDEVIC -00 023B CCOMND -00 023C CAUX1 -00 023D CAUX2 -00 023F ERRFLG -00 0240 DFLAGS -00 0241 DBSECT -00 0242 BOOTAD -00 0244 COLDST -00 0245 RECLEN -00 0246 DSKTIM -00 026C VSFLAG -00 026D KEYDIS -00 026E FINE -00 026F GPRIOR -00 0270 PADDL0 -00 0271 PADDL1 -00 0272 PADDL2 -00 0273 PADDL3 -00 0278 STICK0 -00 0279 STICK1 -00 027C PTRIG0 -00 027D PTRIG1 -00 027E PTRIG2 -00 027F PTRIG3 -00 0284 STRIG0 -00 0285 STRIG1 -00 0288 HIBYTE -00 0289 WMODE -00 028A BLIM -00 028B IMASK -00 028C JVECK -00 028E NEWADR -00 0290 TXTROW -00 0291 TXTCOL -00 0293 TINDEX -00 0294 TXTMSC -00 0296 TXTOLD -00 029C CRETRY -00 029D HOLD3 -00 029E SUBTMP -00 029F HOLD2 -00 02A0 DMASK -00 02A1 TMPLBT -00 02A2 ESCFLG -00 02A3 TABMAP -00 02B2 LOGMAP -00 02B6 INVFLG -00 02B7 FILFLG -00 02B8 TMPROW -00 02B9 TMPCOL -00 02BB SCRFLG -00 02BC HOLD4 -00 02BD DRETRY -00 02BE SHFLOK -00 02BF BOTSCR -00 02C0 PCOLR0 -00 02C1 PCOLR1 -00 02C2 PCOLR2 -00 02C3 PCOLR3 -00 02C4 COLOR0 -00 02C5 COLOR1 -00 02C6 COLOR2 -00 02C7 COLOR3 -00 02C8 COLOR4 -00 02C8 COLBAKS -00 02C9 RUNADR -00 02CB HIUSED -00 02CD ZHIUSE -00 02CF GBYTEA -00 02D1 LOADAD -00 02D3 ZLOADA -00 02D5 DSCTLN -00 02D7 ACMISR -00 02D9 KRPDEL -00 02DA KEYREP -00 02DB NOCLIK -00 02DC HELPFG -00 02DD DMASAV -00 02DE PBPNT -00 02DF PBUFSZ -00 02E0 DOSRUN -00 02E4 RAMSIZ -00 02E5 MEMTOP -00 02E7 MEMLO -00 02E9 HNDLOD -00 02EA DVSTAT -00 02EE CBAUDL -00 02EF CBAUDH -00 02F0 CRSINH -00 02F1 KEYDEL -00 02F2 CH1 -00 02F3 CHACT -00 02F4 CHBAS -00 02F5 NEWROW -00 02F6 NEWCOL -00 02F8 ROWINC -00 02F9 COLINC -00 02FA CHAR -00 02FB ATACHR -00 02FC CHKEY -00 02FD FILDAT -00 02FE DSPFLG -00 02FF SSFLAG -00 0300 DDEVIC -00 0301 DUNIT -00 0302 DCOMND -00 0303 DSTATS -00 0304 DBUFLO -00 0305 DBUFHI -00 0306 DTIMLO -00 0307 DUNUSE -00 0308 DBYTLO -00 0309 DBYTHI -00 030A DAUX1 -00 030B DAUX2 -00 030C TIMER1 -00 030E JMPERS -00 030F CASFLG -00 0310 TIMER2 -00 0314 PTIMOT -00 0316 SAVIO -00 0317 TIMFLG -00 0318 STACKP -00 0319 TSTAT -00 031A HATABS -00 033D PUPBT1 -00 033E PUPBT2 -00 033F PUPBT3 -00 0340 ICHID -00 0341 ICDNO -00 0342 ICCOM -00 0343 ICSTA -00 0344 ICBAL -00 0345 ICBAH -00 0346 ICPTL -00 0347 ICPTH -00 0348 ICBLL -00 0349 ICBLH -00 034A ICAX1 -00 034B ICAX2 -00 034C ICSPR -00 03C0 PRNBUF -00 03E8 SUPERF -00 03E9 CKEY -00 03EA CASSBT -00 03EB CARTCK -00 03ED ACMVAR -00 03F9 MINTLK -00 03FA GINTLK -00 03FB CHLINK -00 03FD CASBUF -00 0480 USAREA -00 D200 POKEY -00 D200 POT0 -00 D201 POT1 -00 D202 POT2 -00 D203 POT3 -00 D204 POT4 -00 D205 POT5 -00 D206 POT6 -00 D207 POT7 -00 D208 ALLPOT -00 D209 KBCODE -00 D20A RANDOM -00 D20B POTGO -00 D20D SERIN -00 D20E IRQST -00 D20F SKSTAT -00 D200 AUDF1 -00 D201 AUDC1 -00 D202 AUDF2 -00 D203 AUDC2 -00 D204 AUDF3 -00 D205 AUDC3 -00 D206 AUDF4 -00 D207 AUDC4 -00 D208 AUDCTL -00 D209 STIMER -00 D20A SKRES -00 D20D SEROUT -00 D20E IRQEN -00 D20F SKCTL -00 D000 GTIA -00 D000 HPOSP0 -00 D001 HPOSP1 -00 D002 HPOSP2 -00 D003 HPOSP3 -00 D004 HPOSM0 -00 D005 HPOSM1 -00 D006 HPOSM2 -00 D007 HPOSM3 -00 D008 SIZEP0 -00 D009 SIZEP1 -00 D00A SIZEP2 -00 D00B SIZEP3 -00 D00C SIZEM -00 D00D GRAFP0 -00 D00E GRAFP1 -00 D00F GRAFP2 -00 D010 GRAFP3 -00 D011 GRAFM -00 D012 COLPM0 -00 D013 COLPM1 -00 D014 COLPM2 -00 D015 COLPM3 -00 D016 COLPF0 -00 D017 COLPF1 -00 D018 COLPF2 -00 D019 COLPF3 -00 D01A COLBAK -00 D01B PRIOR -00 D01C VDELAY -00 D01D GRACTL -00 D01E HITCLR -00 D01F CONSOL -00 D000 M0PF -00 D001 M1PF -00 D002 M2PF -00 D003 M3PF -00 D004 P0PF -00 D005 P1PF -00 D006 P2PF -00 D007 P3PF -00 D008 M0PL -00 D009 M1PL -00 D00A M2PL -00 D00B M3PL -00 D00C P0PL -00 D00D P1PL -00 D00E P2PL -00 D00F P3PL -00 D010 TRIG0 -00 D011 TRIG1 -00 D012 TRIG2 -00 D013 TRIG3 -00 D014 PAL -00 D400 ANTIC -00 D400 DMACTL -00 D401 CHACTL -00 D402 DLPTR -00 D404 HSCROL -00 D405 VSCROL -00 D407 PMBASE -00 D409 CHBASE -00 D40A WSYNC -00 D40B VCOUNT -00 D40C PENH -00 D40D PENV -00 D40E NMIEN -00 D40F NMIRES -00 D40F NMIST -00 D300 PIA -00 D300 PORTA -00 D301 PORTB -00 D302 PACTL -00 D303 PBCTL -00 0001 JUMP -00 0041 JVB -00 0010 SCH -00 0020 SCV -00 0040 LMS -00 0080 DLII -00 0000 SKIP1 -00 0010 SKIP2 -00 0020 SKIP3 -00 0030 SKIP4 -00 0040 SKIP5 -00 0050 SKIP6 -00 0060 SKIP7 -00 0070 SKIP8 -00 0002 MODE2 -00 0004 MODE4 -00 0008 MODE8 -00 000E MODEE -00 000F MODEF -FFFD 0000 @DMACTL -00 0000 @DMACTL.BLANK -00 0001 @DMACTL.NARROW -00 0002 @DMACTL.STANDARD -00 0003 @DMACTL.WIDE -00 0004 @DMACTL.MISSILES -00 0008 @DMACTL.PLAYERS -00 0010 @DMACTL.LINEX1 -00 0000 @DMACTL.LINEX2 -00 0020 @DMACTL.DMA -00 003F SCR48 -00 003E SCR40 -00 003D SCR32 -FFFD 0000 @PMCNTL -00 0001 @PMCNTL.MISSILES -00 0002 @PMCNTL.PLAYERS -00 0004 @PMCNTL.TRIGS -FFFD 0000 @GTICTL -00 0000 @GTICTL.PRIOR0 -00 0001 @GTICTL.PRIOR1 -00 0002 @GTICTL.PRIOR2 -00 0004 @GTICTL.PRIOR4 -00 0008 @GTICTL.PRIOR8 -00 0010 @GTICTL.PLY5 -00 0020 @GTICTL.MLC -00 0040 @GTICTL.MODE9 -00 0080 @GTICTL.MODE10 -00 00C0 @GTICTL.MODE11 -FFFD 0000 @KBCODE -00 00FF @KBCODE._NONE -00 001C @KBCODE._ESC -00 001F @KBCODE._1 -00 001E @KBCODE._2 -00 001A @KBCODE._3 -00 0018 @KBCODE._4 -00 001D @KBCODE._5 -00 001B @KBCODE._6 -00 0033 @KBCODE._7 -00 0035 @KBCODE._8 -00 0030 @KBCODE._9 -00 0032 @KBCODE._0 -00 0036 @KBCODE._LT -00 0037 @KBCODE._GT -00 0034 @KBCODE._DEL -00 002C @KBCODE._TAB -00 002F @KBCODE._Q -00 002E @KBCODE._W -00 002A @KBCODE._E -00 0028 @KBCODE._R -00 002D @KBCODE._T -00 002B @KBCODE._Y -00 000B @KBCODE._U -00 000D @KBCODE._I -00 0008 @KBCODE._O -00 000A @KBCODE._P -00 000E @KBCODE._MIN -00 000E @KBCODE._UP -00 000F @KBCODE._EQ -00 000F @KBCODE._DOWN -00 000C @KBCODE._RET -00 003F @KBCODE._A -00 003E @KBCODE._S -00 003A @KBCODE._D -00 0038 @KBCODE._F -00 003D @KBCODE._G -00 0039 @KBCODE._H -00 0001 @KBCODE._J -00 0005 @KBCODE._K -00 0000 @KBCODE._L -00 0002 @KBCODE._SEMICOLON -00 0006 @KBCODE._PLUS -00 0006 @KBCODE._LEFT -00 0007 @KBCODE._ASTERISK -00 0007 @KBCODE._RIGHT -00 003C @KBCODE._CAPS -00 0017 @KBCODE._Z -00 0016 @KBCODE._X -00 0012 @KBCODE._C -00 0010 @KBCODE._V -00 0015 @KBCODE._B -00 0024 @KBCODE._N -00 0025 @KBCODE._M -00 0020 @KBCODE._COMMA -00 0022 @KBCODE._DOT -00 0026 @KBCODE._SLASH -00 0027 @KBCODE._ATARI -00 0011 @KBCODE._HELP -00 0003 @KBCODE._F1 -00 0004 @KBCODE._F2 -00 0013 @KBCODE._F3 -00 0014 @KBCODE._F4 -00 0021 @KBCODE._SPACE -00 009B EOL -00 0080 TEMP_W -00 0082 TEMP_B -00 0083 TEMP_W2 -00 0085 TEMP_W3 -00 2000 PLAYER -00 00E0 SONG_START_PTR -00 00E2 SONG_END_PTR -00 00E4 CHN_COPY -00 00ED CHN_POS -00 00F6 BPTR -00 00F8 CUR_POS -00 00F9 CHN_BITS -00 00FA BIT_DATA -00 2003 INIT_SONG -00 2006 INIT_SONG.0@ -00 2040 INIT_SONG.CLEAR -00 2048 INIT_SONG.CBUF -00 2056 PLAY_FRAME -00 2062 PLAY_FRAME.CHN_LOOP -00 2074 PLAY_FRAME.GOT_BIT -00 2080 PLAY_FRAME.DO_COPY_BYTE -00 2088 PLAY_FRAME.STORE -00 208F PLAY_FRAME.SKIP_CHN -00 2096 PLAY_FRAME.CHECK_END_SONG -00 20A8 GET_BYTE -00 20A9 SONG_PTR -00 2100 BUFFERS -00 2C00 START1 -00 2C27 LEET_ANIM -00 2C50 1@ -00 2C74 NEXT_LETTER -00 2C93 LEET_END -00 2C9A WAIT_FOR_RELEASING_KEYZ -00 2C9A WAIT_FOR_RELEASING_KEYZ.2@ -00 2CA1 WAIT_FOR_RELEASING_KEYZ.3@ -00 2CAC WAIT_FOR_RELEASING_KEYZ.4@ -00 2CB2 DL_PRE -00 2CD2 PRE_SCREEN -00 2DF2 PRE_SCREEN_END -00 2DF2 LEET_SPEEK1 -00 2E0C LEET_SPEEK2 -00 2E26 LEET_SPEEK3 -00 2E40 LEET_SPEEK4 -00 2E5A LEET_SPEEKS_L -00 2E5E LEET_SPEEKS_H -00 2E62 LEET_SCREEN -00 2F82 LEET_SCREEN_END -00 2F82 PLAYMUSIC -00 2F9F STOPMUSIC -00 2FA9 VBLINTERRUPT -00 3000 MUSIC_DATA -00 357F MUSIC_DATA_END -00 3000 SCREEN -00 3410 DL -00 343C START -00 3482 PLEASE_WAIT_LOOP -00 3498 5@ -00 3499 SAMPLE_LOAD -00 34FA 6@ -00 3504 EXIT_TECH_DIFF -00 3504 7@ -00 350B 8@ -00 3516 9@ -00 352A SAMPLE1 -00 4896 SAMPLE_END1 -00 4896 SAMPLE2 -00 6B7B SAMPLE_END2 -00 6B7B SAMPLE3 -00 6E15 SAMPLE_END3 -00 6E15 SAMPLE4 -00 70AF SAMPLE_END4 -00 70AF SAMPLE5 -00 98C9 SAMPLE_END5 -00 98C9 SAMPLES_L -00 98D4 SAMPLES_H -00 98DF SAMPLES_END_L -00 98EA SAMPLES_END_H -00 98F5 FINITO diff --git a/intro/tech_diff.lst b/intro/tech_diff.lst deleted file mode 100644 index 4f8a958..0000000 --- a/intro/tech_diff.lst +++ /dev/null @@ -1,1483 +0,0 @@ -mads 2.1.7 build 3 (13 Sep 23) -Source: tech_diff.asm - 1 ; tech diff https://www.youtube.com/live/xXDjtDJf69E?si=Sg9HLaZ1krfz-m12&t=1578 - 2 ;--------------------------------------------------- - 3 OPT r+ - 4 - 5 ;--------------------------------------------------- - 6 ; Zpage variables - 7 .zpvar temp_w .word = $80 - 8 .zpvar temp_b .byte - 9 .zpvar temp_w2 .word - 10 .zpvar temp_w3 .word - 11 ;--------------------------------------------------- - 12 icl '../lib/ATARISYS.ASM' -Source: ATARISYS.ASM - 1 ;**************************************************************************** - 2 ;* ATARI PERSONAL COMPUTER * - 3 ;* SYSTEM EQUATES * - 4 ;**************************************************************************** - 5 ; - 6 ; OPERATING SYSTEM EQUATE FILE - 7 ; - 8 ; MODULE ORIGIN TABLE - 9 ; - 10 ; VECTOR TABLE - 11 ; - 12 ; HANDLER ENTRY POINTS ARE CALL- - 13 ; ED OUT IN THE FOLLOWING VECTOR - 14 ; TABLE. THESE ARE THE ADDRESSES - 15 ; MINUS ONE. - 16 ; - 17 ; EXAMPLE FOR EDITOR - 18 ; - 19 ; E400 OPEN - 20 ; 2 CLOSE - 21 ; 4 GET - 22 ; 6 PUT - 23 ; 8 STATUS - 24 ; A SPECIAL - 25 ; C JUMP TO POWER ON INIT - 26 ; F NOT USED - 27 ; - 28 = E400 EDITRV EQU $E400 ;EDITOR - 29 = E410 SCRENV EQU $E410 ;TV SCREEN - 30 = E420 KEYBDV EQU $E420 ;KEYBOARD - 31 = E430 PRINTV EQU $E430 ;PRINTER - 32 = E440 CASETV EQU $E440 ;CASSETTE - 33 ; - 34 ; JUMP VECTOR TABLE - 35 ; - 36 ; THE FOLLOWING IS A TABLE OF - 37 ; JUMP INSTRUCTIONS TO VARIOUS - 38 ; ENTRY POINTS IN THE OPERATING - 39 ; SYSTEM - 40 ; - 41 = E450 DISKIV EQU $E450 ;DISK INITIALIZATION - 42 = E453 DSKINV EQU $E453 ;DISK INTERFACE - 43 = E456 CIOV EQU $E456 ;CENTRAL I/O ROUTINE - 44 = E459 SIOV EQU $E459 ;SERIAL I/O ROUTINE - 45 = E45C SETVBV EQU $E45C ;SET SYSTEM TIMERS - 46 = E45F SYSVBV EQU $E45F ;VBLANK CALCULATIONS - 47 = E462 XITVBV EQU $E462 ;EXIT VBLANK - 48 = E465 SIOINV EQU $E465 ;SIO INITIALIZATION - 49 = E468 SENDEV EQU $E468 ;SEND ENABLE ROUTINE - 50 = E46B INTINV EQU $E46B ;INTRPT HANDLER INIT - 51 = E46E CIOINV EQU $E46E ;CIO INITIALIZATION - 52 = E471 BLKBDV EQU $E471 ;BLACKBOARD MODE - 53 = E474 WARMSV EQU $E474 ;WARM START VECTOR - 54 = E477 COLDSV EQU $E477 ;COLD START VECTOR - 55 = E47A RBLOKV EQU $E47A ;CASSETTE READ BLOCK - 56 = E47D CSOPIV EQU $E47D ;CASSETTE INPUT OPEN - 57 ; - 58 ; VECTORS ADDED FOR 800XL - 59 ; - 60 = E480 PUPDIV EQU $E480 ;POWER UP DISPLAY - 61 = E483 SLFTSV EQU $E483 ;SELF TEST PROGRAM - 62 = E486 PHENTV EQU $E486 ;UPLOADED HANDLER ENTER - 63 = E489 PHULNV EQU $E489 ;UPLOADED HANDLER UNLINK - 64 = E48C PHINIV EQU $E48C ;UPLOADED HANDLER INIT - 65 ; - 66 ; OPERATING SYSTEM EQUATES - 67 ; - 68 ; COMMAND CODES FOR IOCBS - 69 ; - 70 = 0003 _OPEN EQU $03 ;OPEN FOR I/O - 71 = 0005 GETREC EQU $05 ;GET RECORD (TEXT) - 72 = 0007 GETCHR EQU $07 ;GET CHARACTER(S) - 73 = 0009 PUTREC EQU $09 ;PUT RECORD (TEXT) - 74 = 000B PUTCHR EQU $0B ;PUT CHARACTER(S) - 75 = 000C _CLOSE EQU $0C ;CLOSE DEVICE - 76 = 000D STATIS EQU $0D ;STATUS REQUEST - 77 = 000E SPECIL EQU $0E ;SPECIAL ENTRY COMMAND - 78 ; - 79 ; SPECIAL ENTRY COMMANDS - 80 ; - 81 = 0011 DRAWLN EQU $11 ;DRAW LINE - 82 = 0012 FILLIN EQU $12 ;FILL - 83 = 0020 RENAME EQU $20 ;RENAME DISK FILE - 84 = 0021 DELETE EQU $21 ;DELETE DISK FILE - 85 = 0022 FORMAT EQU $22 ;FORMAT DISK - 86 = 0023 LOCKFL EQU $23 ;LOCK FILE - 87 = 0024 UNLOCK EQU $24 ;UNLOCK FILE - 88 = 0025 POINT EQU $25 ;POINT SECTOR - 89 = 0026 NOTE EQU $26 ;NOTE SECTOR - 90 = 00FF IOCFRE EQU $FF ;IOCB "FREE" - 91 ; - 92 ; AUX1 EQUATES - 93 ; () INDICATES WHICH DEVICES - 94 ; - 95 = 0001 APPEND EQU $01 ;WR APPEND(D)-SCN RD(E) - 96 = 0002 DIRECT EQU $02 ;OPEN DIRECTORY(D) - 97 = 0004 OPNIN EQU $04 ;OPEN FOR INPUT(ALL) - 98 = 0008 OPNOT EQU $08 ;OPEN FOR OUTPUT(ALL) - 99 = 000C OPNINO EQU $0C ;OPEN INPUT&OUTPUT(ALL) - 100 = 0010 MXDMOD EQU $10 ;OPEN MIXED MODE(E,S) - 101 = 0020 INSCLR EQU $20 ;OPEN W/O CLEAR(E,S) - 102 ; - 103 ; DEVICE NAMES - 104 ; - 105 = 0045 SCREDT EQU 'E' ;SCREEN EDITOR (R/W) - 106 = 004B KBD EQU 'K' ;KEYBOARD (R ONLY) - 107 = 0053 DISPLY EQU 'S' ;SCREEN DISPLAY (R/W) - 108 = 0050 PRINTR EQU 'P' ;PRINTER (W ONLY) - 109 = 0043 CASSET EQU 'C' ;CASSETTE (R/W) - 110 = 0052 RS232 EQU 'R' ;MODEM (R/W) - 111 = 0044 DISK EQU 'D' ;DISK (R/W) - 112 ; - 113 ; - 114 ; - 115 ; OPERATING SYSTEM STATUS CODES - 116 ; - 117 = 0001 SUCCES EQU $01 ;SUCCESSFUL OPERATION - 118 = 0080 BRKABT EQU $80 ;BREAK KEY ABORT - 119 = 0081 PRVOPN EQU $81 ;IOCB ALREADY OPEN - 120 = 0082 NONDEV EQU $82 ;NON-EXISTANT DEVICE - 121 = 0083 WRONLY EQU $83 ;IOCB OPEN FOR W ONLY - 122 = 0084 NVALID EQU $84 ;INVALID COMMAND - 123 = 0085 NOTOPN EQU $85 ;DEVICE/FILE NOT OPEN - 124 = 0086 BADIOC EQU $86 ;INVALID IOCB # - 125 = 0087 RDONLY EQU $87 ;IOCB OPEN FOR R ONLY - 126 = 0088 EOFERR EQU $88 ;END OF FILE - 127 = 0089 TRNRCD EQU $89 ;TRUNCATED RECORD - 128 = 008A TIMOUT EQU $8A ;PERIPHERAL TIMEOUT - 129 = 008B DNACK EQU $8B ;DEVICE NO ACKNOWLEDGE - 130 = 008C FRMERR EQU $8C ;SERIAL BUS FRAME ERR - 131 = 008D CRSROR EQU $8D ;CURSOR OVERRANGE - 132 = 008E OVRRUN EQU $8E ;SERIAL DATA OVERRUN - 133 = 008F CHKERR EQU $8F ;SERIAL CHECKSUM ERR - 134 = 0090 DERRER EQU $90 ;PERIPHRAL DEVICE ERR - 135 = 0091 BADMOD EQU $91 ;BAD SCREEN MODE # - 136 = 0092 FNCNOT EQU $92 ;NONEXISTANT FUNCTION - 137 = 0093 SCRMEM EQU $93 ;SCREEN MEM TOO SMALL - 138 = 00AA FILENF EQU $AA ;FILE NOT FOUND - 139 ; - 140 ; PAGE ZERO RAM ASSIGNMENTS - 141 ; - 142 = 0000 LNFLG EQU $00 ;LINBUG RAM - 143 = 0001 NGFLAG EQU $01 ;POWER-UP SELF-TEST FLAG - 144 ; - 145 ; THESE LOCATIONS NOT CLEARED - 146 ; - 147 = 0002 CASINI EQU $02 ;CASSETTE INIT LOC - 148 = 0004 RAMLO EQU $04 ;RAM POINTER MEM TST - 149 = 0006 TRAMSZ EQU $06 ;TEMP REG RAM SIZE - 150 = 0007 TSTDAT EQU $07 ;RAM TEST DATA REG - 151 ; - 152 ;CLEARED ON COLDSTART ONLY - 153 ; - 154 = 0008 WARMST EQU $08 ;WARM START FLAG - 155 = 0009 BOOTQ EQU $09 ;SUCCESSFUL BOOT FLG - 156 = 000A DOSVEC EQU $0A ;DOS START VECTOR - 157 = 000C DOSINI EQU $0C ;DOS INIT ADDRESS - 158 = 000E APPMHI EQU $0E ;APPL MEM HI LIMIT - 159 ; - 160 ;CLEARED ON COLD OR WARM START - 161 ; - 162 = 0010 POKMSK EQU $10 ;MASK POKEY IRQ - 163 = 0011 BRKKEY EQU $11 ;BREAK KEY FLAG - 164 = 0012 RTCLOK EQU $12 ;REAL TIME CLOCK - 165 = 0015 BUFADR EQU $15 ;INDIRECT BUFF ADDR - 166 = 0017 ICCOMT EQU $17 ;COMMAND FOR VECTOR - 167 = 0018 DSKFMS EQU $18 ;FMS POINTER - 168 = 001A DSKUTL EQU $1A ;DISK UTILITIES PTR - 169 = 001C ABUFPT EQU $1C ;RESERVED - 170 = 0020 ICHIDZ EQU $20 ;HANDLER INDEX # - 171 = 0021 ICDNOZ EQU $21 ;DEVICE NUMBER - 172 = 0022 ICCOMZ EQU $22 ;COMMAND CODE - 173 = 0023 ICSTAZ EQU $23 ;STATUS RETURN - 174 = 0024 ICBALZ EQU $24 ;BUFFER ADDRESS - 175 = 0025 ICBAHZ EQU $25 - 176 = 0026 ICPTLZ EQU $26 ;PUT BYTE ROUTINE-1 - 177 = 0027 ICPTHZ EQU $27 - 178 = 0028 ICBLLZ EQU $28 ;BUFFER LENGTH - 179 = 0029 ICBLHZ EQU $29 - 180 = 002A ICAX1Z EQU $2A ;AUXILIARY BYTES - 181 = 002B ICAX2Z EQU $2B - 182 = 002C ICSPRZ EQU $2C ;SPARE BYTES - 183 = 002E ICIDNO EQU $2E ;IOCB # X 16 - 184 = 002F CIOCHR EQU $2F ;CIO CHARACTER BYTE - 185 = 0030 STATUS EQU $30 ;INTERNAL STATUS - 186 = 0031 CHKSUM EQU $31 ;CHECKSUM - 187 = 0032 BUFRLO EQU $32 ;DATA BUFFER LO BYTE - 188 = 0033 BUFRHI EQU $33 ;DATA BUFFER HI BYTE - 189 = 0034 BFENLO EQU $34 ;NEXT BYTE PAST DATA - 190 = 0035 BFENHI EQU $35 ;BUFFER (HI & LO) - 191 = 0036 LTEMP EQU $36 ;LOADER TEMP - 192 = 0038 BUFRFL EQU $38 ;DATA BUFFR FULL FLG - 193 = 0039 RECVDN EQU $39 ;RECIEVE DONE FLAG - 194 = 003A XMTDON EQU $3A ;XMIT DONE FLAG - 195 = 003B CHKSNT EQU $3B ;CHECKSUM SENT FLAG - 196 = 003C NOCKSM EQU $3C ;NO CHKSUM SENT FLAG - 197 ;BPTR EQU $3D ;CASSETTE DATA INDEX - 198 = 003E FTYPE EQU $3E ;INTERRECORD GAP TYPE - 199 = 003F FEOF EQU $3F ;END OF FILE FLAG - 200 = 0040 FREQ EQU $40 ;BEEP COUNT - 201 = 0041 SOUNDR EQU $41 ;NOISY I/O FLAG - 202 = 0042 CRITIC EQU $42 ;CRITICAL MODE - 203 = 0043 FMSZPG EQU $43 ;FMS ZERO PAGE - 204 = 004A ZCHAIN EQU $4A ;HANDLER LOADER TEMP - 205 = 004C DSTAT EQU $4C ;DISPLAY STATUS - 206 = 004D ATRACT EQU $4D ;ATTRACT FLAG - 207 = 004E DRKMSK EQU $4E ;DARK ATTRACT MASK - 208 = 004F COLRSH EQU $4F ;COLOR SHIFTER - 209 = 0050 TMPCHR EQU $50 ;TEMP STORAGE - 210 = 0051 HOLD1 EQU $51 ;TEMP STORAGE - 211 = 0052 LMARGN EQU $52 ;LEFT MARGIN (1) - 212 = 0053 RMARGN EQU $53 ;RIGHT MARGIN (38) - 213 = 0054 ROWCRS EQU $54 ;CURSOR COUNTERS - 214 = 0055 COLCRS EQU $55 - 215 = 0057 DINDEX EQU $57 ;DISPLAY MODE # - 216 = 0058 SAVMSC EQU $58 ;SCREEN MEM ADDR - 217 = 005A OLDROW EQU $5A ;DRAW START POSIT - 218 = 005B OLDCOL EQU $5B - 219 = 005D OLDCHR EQU $5D ;DATA UNDER CURSOR - 220 = 005E OLDADR EQU $5E ;CURSOR MEM ADDR - 221 = 0060 FKDEF EQU $60 ;FUNC KEY DEFEAT POINTER - 222 = 0062 PALNTS EQU $62 ;PAL/NTSC FLAG - 223 = 0063 LOGCOL EQU $63 ;COL IN LOGICAL LINE - 224 = 0064 ADRESS EQU $64 ;TEMP STORAGE - 225 = 0066 MLTEMP EQU $66 ;TEMP STORAGE - 226 = 0068 SAVADR EQU $68 ;TEMP STORAGE - 227 = 006A RAMTOP EQU $6A ;AVAILABLE RAM PAGES - 228 = 006B BUFCNT EQU $6B ;BUFFER COUNT - 229 = 006C BUFSTR EQU $6C ;EDITOR GETCH POINTR - 230 = 006E BITMSK EQU $6E ;BIT MASK - 231 = 006F SHFAMT EQU $6F ;PIXEL JUSTIFICATION - 232 = 0070 ROWAC EQU $70 ;ROW ACCUMULATOR - 233 = 0072 COLAC EQU $72 ;COLUMN ACCUMULATOR - 234 = 0074 ENDPT EQU $74 ;LINE LENGTH - 235 = 0076 DELTAR EQU $76 ;DELTA ROW - 236 = 0077 DELTAC EQU $77 ;DELTA COLUMN - 237 = 0079 KEYDEF EQU $79 ;KEY DEFEAT POINTER - 238 = 007B SWPFLG EQU $7B ;SPLIT SCN CURS CNTL - 239 = 007C HOLDCH EQU $7C ;KB CHAR TEMP HOLD - 240 = 007D INSDAT EQU $7D ;TEMP STORAGE - 241 = 007E COUNTR EQU $7E ;DRAW ITERATION CNT - 242 ; - 243 ; 80-FF ARE RESERVED FOR USER - 244 ; - 245 ; NOTE: SEE FLOATING POINT - 246 ; SUBROUTINE AREA FOR ZERO - 247 ; PAGE CELLS - 248 ; - 249 ; PAGE 1 - HARDWARE STACK - 250 ; - 251 ; PAGE TWO RAM ASSIGNMENTS - 252 ; - 253 = 0200 VDSLST EQU $0200 ;DSP LIST NMI VECTOR - 254 = 0202 VPRCED EQU $0202 ;PROCEED IRQ VECTOR - 255 = 0204 VINTER EQU $0204 ;INTERUPT IRQ VECTOR - 256 = 0206 VBREAK EQU $0206 ;BRK INST IRQ VECTOR - 257 = 0208 VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR - 258 = 020A VSERIN EQU $020A ;POKEY INPUT RDY IRQ - 259 = 020C VSEROR EQU $020C ;POKEY OUTPUT RDY - 260 = 020E VSEROC EQU $020E ;POKEY OUTPUT DONE - 261 = 0210 VTIMR1 EQU $0210 ;POKEY TIMER 1 IRQ - 262 = 0212 VTIMR2 EQU $0212 ;POKEY TIMER 2 IRQ - 263 = 0214 VTIMR4 EQU $0214 ;POKEY TIMER 4 IRQ - 264 = 0216 VIMIRQ EQU $0216 ;IMMED IRQ VECTOR - 265 = 0218 CDTMV1 EQU $0218 ;COUNT DOWN TIMER 1 - 266 = 021A CDTMV2 EQU $021A ;COUNT DOWN TIMER 2 - 267 = 021C CDTMV3 EQU $021C ;COUNT DOWN TIMER 3 - 268 = 021E CDTMV4 EQU $021E ;COUNT DOWN TIMER 4 - 269 = 0220 CDTMV5 EQU $0220 ;COUNT DOWN TIMER 5 - 270 = 0222 VVBLKI EQU $0222 ;IMM VBLK NMI VECTOR - 271 = 0224 VVBLKD EQU $0224 ;DEF VBLK NMI VECTOR - 272 = 0226 CDTMA1 EQU $0226 ;CDTMV1 JSR ADDRESS - 273 = 0228 CDTMA2 EQU $0228 ;CDTMV2 JSR ADDRESS - 274 = 022A CDTMF3 EQU $022A ;CDTMV3 FLAG - 275 = 022B SRTIMR EQU $022B ;SOFTWARE REPEAT TMR - 276 = 022C CDTMF4 EQU $022C ;CDTMV4 FLAG - 277 = 022D INTEMP EQU $022D ;IAN'S TEMP - 278 = 022E CDTMF5 EQU $022E ;CDTMV5 FLAG - 279 = 022F DMACTLS EQU $022F ;SAVE DMACTL REG - 280 = 0230 DLPTRS EQU $0230 ;SAVE DISP LIST LO - 281 ;SDLSTH EQU $0231 ;SAVE DISP LIST HI - 282 = 0232 SSKCTL EQU $0232 ;SKCTL REGISTER RAM - 283 = 0233 LCOUNT EQU $0233 ;LOADER TEMP - 284 = 0234 LPENH EQU $0234 ;LIGHT PEN HORIZONTAL - 285 = 0235 LPENV EQU $0235 ;LIGHT PEN VERTICAL - 286 = 0236 BRKKY EQU $0236 ;BREAK KEY VECTOR - 287 = 0238 RELADR EQU $0238 ;LOADER REL ADDR - 288 = 023A CDEVIC EQU $023A ;COMMAND BUFFER-DEV - 289 = 023B CCOMND EQU $023B ;COMMAND BUFFER-CMND - 290 = 023C CAUX1 EQU $023C ;COMMAND BUFFER AUX1 - 291 = 023D CAUX2 EQU $023D ;COMMAND BUFFER AUX2 - 292 ;TEMP EQU $023E ;TEMPORARY RAM CELL - 293 = 023F ERRFLG EQU $023F ;DEVICE ERROR FLAG - 294 = 0240 DFLAGS EQU $0240 ;DISK FLAGS(SECTOR1) - 295 = 0241 DBSECT EQU $0241 ;# DISK BOOT SECTORS - 296 = 0242 BOOTAD EQU $0242 ;DISK BOOT ADDRESS - 297 = 0244 COLDST EQU $0244 ;COLDSTART FLAG 1=CS - 298 = 0245 RECLEN EQU $0245 ;LOADER LENGTH - 299 = 0246 DSKTIM EQU $0246 ;DISK TIME OUT REG - 300 = 026C VSFLAG EQU $026C ;FINE SCROLL TEMP - 301 = 026D KEYDIS EQU $026D ;KEY DISABLE FLAG - 302 = 026E FINE EQU $026E ;FINE SCROLL ENABLE(A1200) - 303 = 026F GPRIOR EQU $026F ;GLOBAL PRIORITY - 304 = 0270 PADDL0 EQU $0270 ;POT 0 RAM CELL - 305 = 0271 PADDL1 EQU $0271 - 306 = 0272 PADDL2 EQU $0272 - 307 = 0273 PADDL3 EQU $0273 - 308 = 0278 STICK0 EQU $0278 ;JOYSTICK 0 RAM CELL - 309 = 0279 STICK1 EQU $0279 - 310 = 027C PTRIG0 EQU $027C ;PADDLE TRIGGER 0 - 311 = 027D PTRIG1 EQU $027D - 312 = 027E PTRIG2 EQU $027E - 313 = 027F PTRIG3 EQU $027F - 314 = 0284 STRIG0 EQU $0284 ;JOYSTICK TRIGGER 0 - 315 = 0285 STRIG1 EQU $0285 - 316 = 0288 HIBYTE EQU $0288 ;LOADER - 317 = 0289 WMODE EQU $0289 ;CASSETTE R/W MODE - 318 = 028A BLIM EQU $028A ;CASSETTE RECORD SIZE - 319 = 028B IMASK EQU $028B - 320 = 028C JVECK EQU $028C ;JUMP VECTOR - 321 = 028E NEWADR EQU $028E ;LOADER NEW ADDRESS - 322 = 0290 TXTROW EQU $0290 ;TEXT ROWCRS - 323 = 0291 TXTCOL EQU $0291 ;TEXT COLCRS - 324 = 0293 TINDEX EQU $0293 ;TEXT INDEX - 325 = 0294 TXTMSC EQU $0294 ;TEXT WINDOW MEM ADD - 326 = 0296 TXTOLD EQU $0296 ;TEXT OLDROW & COL - 327 = 029C CRETRY EQU $029C ;# COMMAND RETRIES - 328 = 029D HOLD3 EQU $029D - 329 = 029E SUBTMP EQU $029E - 330 = 029F HOLD2 EQU $029F - 331 = 02A0 DMASK EQU $02A0 ;PIXEL LOCATION MASK - 332 = 02A1 TMPLBT EQU $02A1 - 333 = 02A2 ESCFLG EQU $02A2 ;ESCAPE FLAG - 334 = 02A3 TABMAP EQU $02A3 ;TAB STOP MAP - 335 = 02B2 LOGMAP EQU $02B2 ;LINE START BIT MAP - 336 = 02B6 INVFLG EQU $02B6 ;INVERSE VIDEO FLAG - 337 = 02B7 FILFLG EQU $02B7 ;FILL FLAG FOR DRAW - 338 = 02B8 TMPROW EQU $02B8 - 339 = 02B9 TMPCOL EQU $02B9 - 340 = 02BB SCRFLG EQU $02BB ;SET IF SCROLLING - 341 = 02BC HOLD4 EQU $02BC ;TEMP USED BY DRAW - 342 = 02BD DRETRY EQU $02BD ;# OF DEVICE RETRIES - 343 = 02BE SHFLOK EQU $02BE ;SHIFT/CTL LOCK FLAG - 344 = 02BF BOTSCR EQU $02BF ;BOTTOM OF SCREEN - 345 = 02C0 PCOLR0 EQU $02C0 ;P0 COLOR - 346 = 02C1 PCOLR1 EQU $02C1 ;P1 COLOR - 347 = 02C2 PCOLR2 EQU $02C2 ;P2 COLOR - 348 = 02C3 PCOLR3 EQU $02C3 ;P3 COLOR - 349 = 02C4 COLOR0 EQU $02C4 ;COLOR 0 - 350 = 02C5 COLOR1 EQU $02C5 - 351 = 02C6 COLOR2 EQU $02C6 - 352 = 02C7 COLOR3 EQU $02C7 - 353 = 02C8 COLOR4 EQU $02C8 - 354 = 02C8 COLBAKS EQU COLOR4 - 355 = 02C9 RUNADR EQU $02C9 ;LOADER - 356 = 02CB HIUSED EQU $02CB ;LOADER - 357 = 02CD ZHIUSE EQU $02CD ;LOADER - 358 = 02CF GBYTEA EQU $02CF ;LOADER - 359 = 02D1 LOADAD EQU $02D1 ;LOADER - 360 = 02D3 ZLOADA EQU $02D3 ;LOADER - 361 = 02D5 DSCTLN EQU $02D5 ;DISK SECTOR LENGTH - 362 = 02D7 ACMISR EQU $02D7 ;RESERVED - 363 = 02D9 KRPDEL EQU $02D9 ;KEY REPEAT DELAY - 364 = 02DA KEYREP EQU $02DA ;KEY REPEAT RATE(VBLANKS) - 365 = 02DB NOCLIK EQU $02DB ;CLICK ENABLE/DISABLE - 366 = 02DC HELPFG EQU $02DC ;HELP KEY FLAG - 367 = 02DD DMASAV EQU $02DD ;DMA SAVE STATE - 368 = 02DE PBPNT EQU $02DE ;PRINT BUFFER POINTER - 369 = 02DF PBUFSZ EQU $02DF ;PRINT BUFFER SIZE - 370 = 02E0 DOSRUN EQU $02E0 ;DOS RUN/INIT ADDRESSES - 371 = 02E4 RAMSIZ EQU $02E4 ;RAM SIZE-HIGH BYTE - 372 = 02E5 MEMTOP EQU $02E5 ;TOP OF AVAIL MEMORY - 373 = 02E7 MEMLO EQU $02E7 ;BOTTOM OF AVAIL MEM - 374 = 02E9 HNDLOD EQU $02E9 ;POLL FLAG (1200) - 375 = 02EA DVSTAT EQU $02EA ;STATUS BUFFER - 376 = 02EE CBAUDL EQU $02EE ;CASSETTE BAUD RATE - 377 = 02EF CBAUDH EQU $02EF - 378 = 02F0 CRSINH EQU $02F0 ;CURSOR INHIBIT 0=ON - 379 = 02F1 KEYDEL EQU $02F1 ;KEY DELAY - 380 = 02F2 CH1 EQU $02F2 ;PRIOR KB CHAR CODE - 381 = 02F3 CHACT EQU $02F3 ;CHACTL REGISTER RAM - 382 = 02F4 CHBAS EQU $02F4 ;CHBAS REGISTER RAM - 383 = 02F5 NEWROW EQU $02F5 ;POINT DRAW GOES TO - 384 = 02F6 NEWCOL EQU $02F6 - 385 = 02F8 ROWINC EQU $02F8 ;ROW INCREMENT VALUE - 386 = 02F9 COLINC EQU $02F9 ;COL INCREMENT VALUE - 387 = 02FA CHAR EQU $02FA ;INTERNAL CHAR CODE - 388 = 02FB ATACHR EQU $02FB ;ATASCII CHARACTER - 389 = 02FC CHKEY EQU $02FC ;KB CHAR CODE (FIFO) - 390 = 02FD FILDAT EQU $02FD ;RIGHT FILL DATA - 391 = 02FE DSPFLG EQU $02FE ;DISPLAY FLAG - 392 = 02FF SSFLAG EQU $02FF ;START/STOP FLAG - 393 ; - 394 ; PAGE THREE RAM ASSIGNMENTS - 395 ; - 396 = 0300 DDEVIC EQU $0300 ;BUS I.D. NUMBER - 397 = 0301 DUNIT EQU $0301 ;UNIT NUMBER - 398 = 0302 DCOMND EQU $0302 ;BUS COMMAND - 399 = 0303 DSTATS EQU $0303 ;COMMAND TYPE/STATUS - 400 = 0304 DBUFLO EQU $0304 ;DATA BUFFER LO BYTE - 401 = 0305 DBUFHI EQU $0305 ;DATA BUFFER HI BYTE - 402 = 0306 DTIMLO EQU $0306 ;DEVICE TIMEOUT SECS - 403 = 0307 DUNUSE EQU $0307 ;UNUSED BYTE - 404 = 0308 DBYTLO EQU $0308 ;# OF BYTES XFERRED - 405 = 0309 DBYTHI EQU $0309 - 406 = 030A DAUX1 EQU $030A ;COMMAND AUX BYTE 1 - 407 = 030B DAUX2 EQU $030B ;COMMAND AUX BYTE 2 - 408 = 030C TIMER1 EQU $030C ;INITIAL TIMER VALUE - 409 = 030E JMPERS EQU $030E ;OPTIONS (1200) - 410 = 030F CASFLG EQU $030F ;CASSETE MODE IF SET - 411 = 0310 TIMER2 EQU $0310 ;FINAL TIMER VALUE - 412 ;TEMP1 EQU $0312 ;TEMP STORAGE - 413 ;TEMP2 EQU $0313 ;TEMP STORAGE - 414 = 0314 PTIMOT EQU $0314 ;PRINTER TIMEOUT REG - 415 ;TEMP3 EQU $0315 ;TEMP STORAGE - 416 = 0316 SAVIO EQU $0316 ;SAVE SERIAL IN DATA - 417 = 0317 TIMFLG EQU $0317 ;TIMEOUT FLAG C BAUD - 418 = 0318 STACKP EQU $0318 ;SIO STACK PTR SAVE - 419 = 0319 TSTAT EQU $0319 ;TEMP STATUS HOLDER - 420 = 031A HATABS EQU $031A ;HANDLER ADDR TABLE - 421 = 033D PUPBT1 EQU $033D ;POWER/UP RESET - 422 = 033E PUPBT2 EQU $033E - 423 = 033F PUPBT3 EQU $033F - 424 = 0340 ICHID EQU $0340 ;HANDLER INDEX # - 425 = 0341 ICDNO EQU $0341 ;DEVICE NUMBER - 426 = 0342 ICCOM EQU $0342 ;COMMAND CODE - 427 = 0343 ICSTA EQU $0343 ;STATUS - 428 = 0344 ICBAL EQU $0344 ;BUFFER ADDR LO BYTE - 429 = 0345 ICBAH EQU $0345 ;BUFFER ADDR HI BYTE - 430 = 0346 ICPTL EQU $0346 ;PUT ROUTINE ADDR-1 - 431 = 0347 ICPTH EQU $0347 - 432 = 0348 ICBLL EQU $0348 ;BUFFER LENGTH LO - 433 = 0349 ICBLH EQU $0349 ;BUFFER LENGTH HI - 434 = 034A ICAX1 EQU $034A ;AUX BYTE 1 - 435 = 034B ICAX2 EQU $034B ;AUX BYTE 2 - 436 = 034C ICSPR EQU $034C ;SPARE BYTES - 437 = 03C0 PRNBUF EQU $03C0 ;PRINTER BUFFER (40 BYTES) - 438 = 03E8 SUPERF EQU $03E8 ;SCREEN EDITOR - 439 = 03E9 CKEY EQU $03E9 ;START KEY FLAG - 440 = 03EA CASSBT EQU $03EA ;CASSETTE BOOT FLAG - 441 = 03EB CARTCK EQU $03EB ;CARTRIDGE CHECKSUM - 442 = 03ED ACMVAR EQU $03ED ;RESERVED - 443 = 03F9 MINTLK EQU $03F9 ;RESERVED - 444 = 03FA GINTLK EQU $03FA ;CART INTERLOCK - 445 = 03FB CHLINK EQU $03FB ;HANDLER CHAIN - 446 ; - 447 ; PAGE FOUR RAM ASSIGNMENTS - 448 ; - 449 = 03FD CASBUF EQU $03FD ;CASSETTE BUFFER (131 BYTES) - 450 = 0480 USAREA EQU $0480 ;USER AREA - 451 ; - 452 ; PAGE FIVE AND SIX ARE RESERVED - 453 ; FOR USER WORK SPACE - 454 ; - 455 ; COLLEEN MNEMONICS - 456 ; - 457 ; --------------------------------------------------------------------------- - 458 = D200 POKEY EQU $D200 - 459 ; --------------------------------------------------------------------------- - 460 ; - 461 ; READ - 462 ; - 463 = D200 POT0 EQU POKEY+$00 - 464 = D201 POT1 EQU POKEY+$01 - 465 = D202 POT2 EQU POKEY+$02 - 466 = D203 POT3 EQU POKEY+$03 - 467 = D204 POT4 EQU POKEY+$04 - 468 = D205 POT5 EQU POKEY+$05 - 469 = D206 POT6 EQU POKEY+$06 - 470 = D207 POT7 EQU POKEY+$07 - 471 = D208 ALLPOT EQU POKEY+$08 - 472 = D209 KBCODE EQU POKEY+$09 - 473 = D20A RANDOM EQU POKEY+$0a - 474 = D20B POTGO EQU POKEY+$0b - 475 = D20D SERIN EQU POKEY+$0d - 476 = D20E IRQST EQU POKEY+$0e - 477 = D20F SKSTAT EQU POKEY+$0f - 478 ; - 479 ; WRITE - 480 ; - 481 = D200 AUDF1 EQU POKEY+$00 - 482 = D201 AUDC1 EQU POKEY+$01 - 483 = D202 AUDF2 EQU POKEY+$02 - 484 = D203 AUDC2 EQU POKEY+$03 - 485 = D204 AUDF3 EQU POKEY+$04 - 486 = D205 AUDC3 EQU POKEY+$05 - 487 = D206 AUDF4 EQU POKEY+$06 - 488 = D207 AUDC4 EQU POKEY+$07 - 489 = D208 AUDCTL EQU POKEY+$08 - 490 = D209 STIMER EQU POKEY+$09 - 491 = D20A SKRES EQU POKEY+$0a - 492 = D20D SEROUT EQU POKEY+$0d - 493 = D20E IRQEN EQU POKEY+$0e - 494 = D20F SKCTL EQU POKEY+$0f - 495 ; - 496 ; - 497 ; - 498 ; --------------------------------------------------------------------------- - 499 = D000 GTIA EQU $D000 - 500 ; --------------------------------------------------------------------------- - 501 ; - 502 ; WRITE - 503 ; - 504 = D000 HPOSP0 EQU GTIA+$00 - 505 = D001 HPOSP1 EQU GTIA+$01 - 506 = D002 HPOSP2 EQU GTIA+$02 - 507 = D003 HPOSP3 EQU GTIA+$03 - 508 = D004 HPOSM0 EQU GTIA+$04 - 509 = D005 HPOSM1 EQU GTIA+$05 - 510 = D006 HPOSM2 EQU GTIA+$06 - 511 = D007 HPOSM3 EQU GTIA+$07 - 512 = D008 SIZEP0 EQU GTIA+$08 - 513 = D009 SIZEP1 EQU GTIA+$09 - 514 = D00A SIZEP2 EQU GTIA+$0a - 515 = D00B SIZEP3 EQU GTIA+$0b - 516 = D00C SIZEM EQU GTIA+$0c - 517 = D00D GRAFP0 EQU GTIA+$0d - 518 = D00E GRAFP1 EQU GTIA+$0e - 519 = D00F GRAFP2 EQU GTIA+$0f - 520 = D010 GRAFP3 EQU GTIA+$10 - 521 = D011 GRAFM EQU GTIA+$11 - 522 = D012 COLPM0 EQU GTIA+$12 - 523 = D013 COLPM1 EQU GTIA+$13 - 524 = D014 COLPM2 EQU GTIA+$14 - 525 = D015 COLPM3 EQU GTIA+$15 - 526 = D016 COLPF0 EQU GTIA+$16 - 527 = D017 COLPF1 EQU GTIA+$17 - 528 = D018 COLPF2 EQU GTIA+$18 - 529 = D019 COLPF3 EQU GTIA+$19 - 530 = D01A COLBAK EQU GTIA+$1a - 531 = D01B PRIOR EQU GTIA+$1b - 532 = D01C VDELAY EQU GTIA+$1c - 533 = D01D GRACTL EQU GTIA+$1d - 534 = D01E HITCLR EQU GTIA+$1e - 535 = D01F CONSOL EQU GTIA+$1f - 536 ; - 537 ; READ - 538 ; - 539 = D000 M0PF EQU GTIA+$00 - 540 = D001 M1PF EQU GTIA+$01 - 541 = D002 M2PF EQU GTIA+$02 - 542 = D003 M3PF EQU GTIA+$03 - 543 = D004 P0PF EQU GTIA+$04 - 544 = D005 P1PF EQU GTIA+$05 - 545 = D006 P2PF EQU GTIA+$06 - 546 = D007 P3PF EQU GTIA+$07 - 547 = D008 M0PL EQU GTIA+$08 - 548 = D009 M1PL EQU GTIA+$09 - 549 = D00A M2PL EQU GTIA+$0a - 550 = D00B M3PL EQU GTIA+$0b - 551 = D00C P0PL EQU GTIA+$0c - 552 = D00D P1PL EQU GTIA+$0d - 553 = D00E P2PL EQU GTIA+$0e - 554 = D00F P3PL EQU GTIA+$0f - 555 = D010 TRIG0 EQU GTIA+$10 - 556 = D011 TRIG1 EQU GTIA+$11 - 557 = D012 TRIG2 EQU GTIA+$12 - 558 = D013 TRIG3 EQU GTIA+$13 - 559 = D014 PAL EQU GTIA+$14 - 560 ; - 561 ; - 562 ; --------------------------------------------------------------------------- - 563 = D400 ANTIC EQU $D400 - 564 ; --------------------------------------------------------------------------- - 565 ; - 566 = D400 DMACTL EQU ANTIC+$00 - 567 = D401 CHACTL EQU ANTIC+$01 - 568 = D402 DLPTR EQU ANTIC+$02 - 569 ;DLISTH EQU ANTIC+$03 - 570 = D404 HSCROL EQU ANTIC+$04 - 571 = D405 VSCROL EQU ANTIC+$05 - 572 = D407 PMBASE EQU ANTIC+$07 - 573 = D409 CHBASE EQU ANTIC+$09 - 574 = D40A WSYNC EQU ANTIC+$0a - 575 = D40B VCOUNT EQU ANTIC+$0b - 576 = D40C PENH EQU ANTIC+$0c - 577 = D40D PENV EQU ANTIC+$0d - 578 = D40E NMIEN EQU ANTIC+$0e - 579 = D40F NMIRES EQU ANTIC+$0f - 580 = D40F NMIST EQU ANTIC+$0f - 581 ; - 582 ; - 583 ; --------------------------------------------------------------------------- - 584 = D300 PIA EQU $D300 - 585 ; --------------------------------------------------------------------------- - 586 ; - 587 = D300 PORTA EQU PIA+0 - 588 = D301 PORTB EQU PIA+1 - 589 = D302 PACTL EQU PIA+2 - 590 = D303 PBCTL EQU PIA+3 - 591 ; - 592 ; --------------------------------------------------------------------------- - 593 ; Atari ANTIC chip display list equates - 594 ; --------------------------------------------------------------------------- - 595 ; - 596 = 0001 JUMP EQU $01 ; display list jump instruction (3 byte) - 597 = 0041 JVB EQU $41 ; display list jump and wait for vblank instruction (3) - 598 ; - 599 = 0010 SCH EQU $10 ; display list horizontal scrolling - 600 = 0020 SCV EQU $20 ; display list vertical scrolling - 601 = 0040 LMS EQU $40 ; display list load memory scan instruction (3 byte) - 602 = 0080 DLII EQU $80 ; display list interrupt instruction - 603 ; - 604 = 0000 SKIP1 EQU $00 ; display list skip 1 scan line instruction - 605 = 0010 SKIP2 EQU $10 ; display list skip 2 scan lines instruction - 606 = 0020 SKIP3 EQU $20 ; display list skip 3 scan lines instruction - 607 = 0030 SKIP4 EQU $30 ; display list skip 4 scan lines instruction - 608 = 0040 SKIP5 EQU $40 ; display list skip 5 scan lines instruction - 609 = 0050 SKIP6 EQU $50 ; display list skip 6 scan lines instruction - 610 = 0060 SKIP7 EQU $60 ; display list skip 7 scan lines instruction - 611 = 0070 SKIP8 EQU $70 ; display list skip 8 scan lines instruction - 612 ; - 613 = 0002 MODE2 EQU $02 ; display list mode 2 - 614 = 0004 MODE4 EQU $04 ; display list mode 4 - 615 = 0008 MODE8 EQU $08 ; display list mode 8 - 616 = 000E MODEE EQU $0E ; display list mode E - 617 = 000F MODEF EQU $0F ; display list mode F - 618 ; --------------------------------------------------------------------------- - 619 ; ENUMS - 620 ; --------------------------------------------------------------------------- - 621 - 622 .enum @dmactl - 623 = 0000 blank = %00 - 624 = 0001 narrow = %01 - 625 = 0002 standard= %10 - 626 = 0003 wide = %11 - 627 = 0004 missiles= %100 - 628 = 0008 players = %1000 - 629 = 0010 lineX1 = %10000 - 630 = 0000 lineX2 = %00000 - 631 = 0020 dma = %100000 - 632 .ende - 633 - 634 = 003F scr48 = @dmactl(wide|dma|players|missiles|lineX1) - 635 = 003E scr40 = @dmactl(standard|dma|players|missiles|lineX1) - 636 = 003D scr32 = @dmactl(narrow|dma|players|missiles|lineX1) - 637 - 638 .enum @pmcntl - 639 = 0001 missiles= %1 - 640 = 0002 players = %10 - 641 = 0004 trigs = %100 - 642 .ende - 643 - 644 .enum @gtictl - 645 = 0000 prior0 = %0 - 646 = 0001 prior1 = %1 - 647 = 0002 prior2 = %10 - 648 = 0004 prior4 = %100 - 649 = 0008 prior8 = %1000 - 650 = 0010 ply5 = %10000 ; Fifth Player Enable - 651 = 0020 mlc = %100000 ; Multiple Color Player Enable - 652 = 0040 mode9 = %01000000 - 653 = 0080 mode10 = %10000000 - 654 = 00C0 mode11 = %11000000 - 655 .ende - 656 ; --------------------------------------------------------------------------- - 657 ; KBCODEs - 658 ; --------------------------------------------------------------------------- - 659 .enum @kbcode - 660 = 00FF _none = 255 - 661 = 001C _esc = 28 - 662 = 001F _1 = 31 - 663 = 001E _2 = 30 - 664 = 001A _3 = 26 - 665 = 0018 _4 = 24 - 666 = 001D _5 = 29 - 667 = 001B _6 = 27 - 668 = 0033 _7 = 51 - 669 = 0035 _8 = 53 - 670 = 0030 _9 = 48 - 671 = 0032 _0 = 50 - 672 = 0036 _lt = 54 - 673 = 0037 _gt = 55 - 674 = 0034 _del = 52 - 675 = 002C _tab = 44 - 676 = 002F _Q = 47 - 677 = 002E _W = 46 - 678 = 002A _E = 42 - 679 = 0028 _R = 40 - 680 = 002D _T = 45 - 681 = 002B _Y = 43 - 682 = 000B _U = 11 - 683 = 000D _I = 13 - 684 = 0008 _O = 8 - 685 = 000A _P = 10 - 686 = 000E _min = 14 - 687 = 000E _up = 14 ; cursor function - 688 = 000F _eq = 15 - 689 = 000F _down = 15 ; cursor function - 690 = 000C _ret = 12 - 691 = 003F _A = 63 - 692 = 003E _S = 62 - 693 = 003A _D = 58 - 694 = 0038 _F = 56 - 695 = 003D _G = 61 - 696 = 0039 _H = 57 - 697 = 0001 _J = 1 - 698 = 0005 _K = 5 - 699 = 0000 _L = 0 - 700 = 0002 _semicolon = 2 - 701 = 0006 _plus = 6 - 702 = 0006 _left = 6 ; cursor function - 703 = 0007 _asterisk = 7 - 704 = 0007 _right = 7 ; cursor function - 705 = 003C _caps = 60 - 706 = 0017 _Z = 23 - 707 = 0016 _X = 22 - 708 = 0012 _C = 18 - 709 = 0010 _V = 16 - 710 = 0015 _B = 21 - 711 = 0024 _N = 36 - 712 = 0025 _M = 37 - 713 = 0020 _comma = 32 - 714 = 0022 _dot = 34 - 715 = 0026 _slash = 38 - 716 = 0027 _atari = 39 - 717 = 0011 _help = 17 - 718 = 0003 _F1 = 3 - 719 = 0004 _F2 = 4 - 720 = 0013 _F3 = 19 - 721 = 0014 _F4 = 20 - 722 = 0021 _space = 33 - 723 .ende - 724 = 009B EOL = $9b - 724 = 0080 TEMP_W - 724 = 0082 TEMP_B - 724 = 0083 TEMP_W2 - 724 = 0085 TEMP_W3 - 13 icl '../lib/MACRO.ASM' -Source: MACRO.ASM - 1 ;------------------------------------- - 2 .MACRO ROLW - 3 ROL :1 - 4 ROL :1+1 - 5 .ENDM - 6 ;------------------------------------- - 7 .MACRO ASLW - 8 ASL :1 - 9 ROL :1+1 - 10 .ENDM - 11 ;------------------------------------- - 12 .MACRO RORW - 13 ROR :1+1 - 14 ROR :1 - 15 .ENDM - 16 ;------------------------------------- - 17 .MACRO LSRW - 18 LSR :1+1 - 19 ROR :1 - 20 .ENDM - 21 - 22 ;------------------------------------- - 23 .MACRO VMAIN - 24 ; VMAIN #WORD,interrupt.vector - 25 ; interrupt.vector: - 26 ; 0 - VIMIRQ - 27 ; 1 - TIMCNT1 - 28 ; 2 - TIMCNT2 - 29 ; 3 - TIMCNT3 - 30 ; 4 - TIMCNT4 - 31 ; 5 - TIMCNT5 - 32 ; 6 - VVBLKI - 33 ; 7 - VVBLKD - 34 ; 8 - TIMVEC1 - 35 ; 9 - TIMVEC2 - 36 ; Initialises Vertical Blank Interrupts - 37 ; (works only with system interrupts ON) - 38 LDY # <:1 - 39 LDX # >:1 - 40 LDA #:2 - 41 JSR SETVBV - 42 .ENDM - 43 ;------------------------------------- - 44 .MACRO VDLI - 45 ; VDLI #WORD - 46 ; Initialises Display List Interrupts - 47 LDY # <:1 - 48 LDX # >:1 - 49 LDA #$C0 - 50 STY $0200 - 51 STX $0201 - 52 STA NMIEN - 53 .ENDM - 54 ;------------------------------------- - 55 .MACRO VDL - 56 ; VDL #WORD - 57 ; Changes Display List addres - 58 ; and sets width of the screen - 59 ; vdl dl,$01 - narrow screen (32 bytes) - 60 ; vdl dl,$02 - normal screen (40 bytes) - 61 ; vdl dl,$03 - wide screen (48 bytes) - 62 ; (works only with system interrupts ON) - 63 - 64 .if %0=2 - 65 lda dmactls - 66 and #$fc - 67 ora #%2 - 68 sta dmactls - 69 .endif - 70 - 71 LDA # <%1 - 72 STA DLPTRS - 73 LDA # >%1 - 74 STA DLPTRS+1 - 75 .ENDM - 76 ;------------------------------------- - 77 .MACRO halt - 78 ?stop - 79 lda RANDOM - 80 and #$05 - 81 sta COLBAK - 82 jmp ?stop - 83 .ENDM - 84 ;------------------------------------- - 85 .MACRO KEY - 86 ; KEY - 87 ; waits for releasing and pressing "any key" - 88 PHA - 89 ?CK1 LDA SKSTAT - 90 AND #$04 - 91 BEQ ?CK1 - 92 ?CK LDA SKSTAT - 93 AND #$04 - 94 BNE ?CK - 95 PLA - 96 .ENDM - 97 ;------------------------------------- - 98 .MACRO WAIT - 99 ; WAIT - 100 ; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) - 101 ?ze LDA VCOUNT - 102 cmp #16 ; if line<16 then wait for line>15 (long VBI protection) - 103 bcc ?ze - 104 sbc #10 ; last lines correction - 105 ?wa cmp VCOUNT - 106 bcc ?wa - 107 ?wf cmp VCOUNT - 108 bcs ?wf - 109 .ENDM - 110 ;------------------------------------- - 111 .macro waitRTC - 112 lda RTCLOK+2 - 113 ?wa cmp RTCLOK+2 - 114 beq ?wa - 115 .endm - 116 ;------------------------------------- - 117 .macro negw - 118 ; negate the given word (0-a) - 119 ;------------------------------------- - 120 sec - 121 lda #$00 - 122 sbc :1 - 123 sta :1 - 124 lda #$00 - 125 sbc :1+1 - 126 sta :1+1 - 127 .endm - 128 ;------------------------------------- - 129 .macro randomize - 130 ;usage: randomize floor ceiling - 131 ;returns (in A) a random .byte between "floor" and "ceiling" - 132 .if :2 < :1 - 133 .error "floor higher than ceiling" - 134 .endif - 135 ?rand - 136 lda random - 137 cmp #:2+1-:1 ;ceiling - 138 bcs ?rand - 139 .if %1>0 ; if floor = 0 - no add offset - 140 adc #:1 - 141 .endif - 142 .endm - 143 ;------------------------------------- - 144 .macro phx - 145 txa - 146 pha - 147 .endm - 148 ;------------------------------------- - 149 .macro phy - 150 tya - 151 pha - 152 .endm - 153 ;------------------------------------- - 154 .macro plx - 155 pla - 156 tax - 157 .endm - 158 ;------------------------------------- - 159 .macro ply - 160 pla - 161 tay - 162 .endm - 163 ;------------------------------------- - 164 .macro txy - 165 txa - 166 tay - 167 .endm - 168 ;------------------------------------- - 169 .macro tyx - 170 tya - 171 tax - 172 .endm - 173 ;------------------------------------- - 174 .macro pause - 175 ;waits :1 number (byte) of frames - 176 ldx #:1 - 177 ?PAUSELOOP - 178 wait - 179 dex - 180 bne ?PAUSELOOP - 181 .ENDM - 182 ;------------------------------------- - 183 .MACRO POKEY_INIT - 184 ; Initialises Pokey chip (required before playing sounds) - 185 mva #0 AUDCTL - 186 mva #3 SKSTAT - 187 .ENDM - 14 ;--------------------------------------------------- - 15 org $2000 - 16 PLAYER - 17 icl '../music/playlzs16.asm' ; Music Player -Source: playlzs16.asm - 1 ; - 2 ; LZSS Compressed SAP player for 16 match bits - 3 ; -------------------------------------------- - 4 ; - 5 ; (c) 2020 DMSC - 6 ; Code under MIT license, see LICENSE file. - 7 ; - 8 ; This player uses: - 9 ; Match length: 8 bits (1 to 256) - 10 ; Match offset: 8 bits (1 to 256) - 11 ; Min length: 2 - 12 ; Total match bits: 16 bits - 13 ; - 14 ; Compress using: - 15 ; lzss -b 16 -o 8 -m 1 input.rsap test.lz12 - 16 ; - 17 ; Assemble this file with MADS assembler, the compressed song is expected in - 18 ; the `test.lz16` file at assembly time. - 19 ; - 20 ; The plater needs 256 bytes of buffer for each pokey register stored, for a - 21 ; full SAP file this is 2304 bytes. - 22 ; - 23 org $e0 - 24 - 25 = 00E0 song_start_ptr .ds 2 - 26 = 00E2 song_end_ptr .ds 2 - 27 = 00E4 chn_copy .ds 9 - 28 = 00ED chn_pos .ds 9 - 29 = 00F6 bptr .ds 2 - 30 = 00F8 cur_pos .ds 1 - 31 = 00F9 chn_bits .ds 1 - 32 - 33 = 00FA bit_data .ds 1 - 34 - 35 - 36 - 37 ;POKEY = $D200 - 38 - 39 org $2000 - 40 - 41 - 42 ;player - 43 FFFF> 2000-20B3> 4C 56 + jmp play_frame - 44 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - 45 ; Song Initialization - this runs in the first tick: - 46 ; - 47 2003 .proc init_song - 48 - 49 ;clear buffers - 50 2003 A9 00 lda #0 - 51 2005 AA tax - 52 @ - 53 2006 9D 00 21 9D 00 22 + :9 sta buffers+#*$100,x - 54 2021 E8 inx - 55 2022 D0 E2 bne @- - 56 - 57 2024 A9 01 85 FA mva #1 bit_data - 58 - 59 ; here initializes song pointer: - 60 2028 18 A5 E0 69 01 8D + adw song_start_ptr #1 song_ptr - 61 - 62 2037 A9 21 8D 4A 20 mva #>(buffers+255) cbuf+2 - 63 ; Init all channels: - 64 203C A2 08 ldx #8 - 65 203E A0 00 ldy #0 - 66 2040 clear - 67 ; Read just init value and store into buffer and POKEY - 68 2040 20 A8 20 jsr get_byte - 69 2043 9D 00 D2 sta POKEY, x - 70 2046 94 E4 sty chn_copy, x - 71 2048 cbuf - 72 2048 8D FF 21 sta buffers + 255 - 73 204B EE 4A 20 inc cbuf + 2 - 74 204E CA dex - 75 204F 10 EF bpl clear - 76 - 77 ; Initialize buffer pointer: - 78 2051 84 F6 sty bptr - 79 2053 84 F8 sty cur_pos - 80 2055 60 rts - 81 .endp - 82 - 83 - 84 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - 85 ; Play one frame of the song - 86 ; - 87 2056 .proc play_frame - 88 2056 A9 21 lda #>buffers - 89 2058 85 F7 sta bptr+1 - 90 - 91 205A A0 00 ldy #0 - 92 205C B1 E0 lda (song_start_ptr),y - 93 205E 85 F9 sta chn_bits - 94 2060 A2 08 ldx #8 - 95 - 96 ; Loop through all "channels", one for each POKEY register - 97 2062 chn_loop: - 98 2062 46 F9 lsr chn_bits - 99 2064 B0 29 bcs skip_chn ; C=1 : skip this channel - 100 - 101 2066 B5 E4 lda chn_copy, x ; Get status of this stream - 102 2068 D0 16 bne do_copy_byte ; If > 0 we are copying bytes - 103 - 104 ; We are decoding a new match/literal - 105 206A 46 FA lsr bit_data ; Get next bit - 106 206C D0 06 bne got_bit - 107 206E 20 A8 20 jsr get_byte ; Not enough bits, refill! - 108 2071 6A ror ; Extract a new bit and add a 1 at the high bit (from C set above) - 109 2072 85 FA sta bit_data ; - 110 2074 got_bit: - 111 2074 20 A8 20 jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte" - 112 2077 B0 0F bcs store ; Bit = 1 is "literal", bit = 0 is "match" - 113 - 114 2079 95 ED sta chn_pos, x ; Store in "copy pos" - 115 - 116 207B 20 A8 20 jsr get_byte - 117 207E 95 E4 sta chn_copy, x ; Store in "copy length" - 118 - 119 ; And start copying first byte - 120 2080 do_copy_byte: - 121 2080 D6 E4 dec chn_copy, x ; Decrease match length, increase match position - 122 2082 F6 ED inc chn_pos, x - 123 2084 B4 ED ldy chn_pos, x - 124 - 125 ; Now, read old data, jump to data store - 126 2086 B1 F6 lda (bptr), y - 127 - 128 2088 store: - 129 2088 A4 F8 ldy cur_pos - 130 208A 9D 00 D2 sta POKEY, x ; Store to output and buffer - 131 208D 91 F6 sta (bptr), y - 132 - 133 208F skip_chn: - 134 ; Increment channel buffer pointer - 135 208F E6 F7 inc bptr+1 - 136 - 137 2091 CA dex - 138 2092 10 CE bpl chn_loop ; Next channel - 139 - 140 2094 E6 F8 inc cur_pos - 141 - 142 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - 143 ; Check for ending of song and jump to the next frame - 144 ; - 145 2096 check_end_song - 146 2096 AD AA 20 C5 E3 D0 + cpw song_ptr song_end_ptr - 147 20A2 90 03 20 03 20 scc:jsr init_song - 148 20A7 60 rts - 149 .endp - 150 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - 151 20A8 get_byte - 152 20A8 AD FF FF lda song_ptr: $ffff ;song_data+1 - 153 20AB EE A9 20 D0 03 EE + inw song_ptr - 154 20B3 60 rts - 155 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - 156 /* start - 157 mwa #song_data song_start_ptr - 158 mwa #song_end song_end_ptr - 159 jsr init_song - 160 @ - 161 lda:cmp:req 20 - 162 jsr player - 163 - 164 lda $d01f ;consol - 165 cmp #7 - 166 seq:jsr init_song - 167 - 168 jmp @- */ - 168 - 169 - 170 - 171 - 172 - 173 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - 174 20B4 .align $100 - 175 2100 buffers - 176 = 2100 .ds 256 * 9 - 177 - 178 ;song_data - 179 ; ins 'InGame.lzss' - 180 ;song_end - 181 - 182 - 183 ; run start - 184 - 18 ;--------------------------------------------------- - 19 ; BASIC off - 20 ORG $2c00 - 21 2C00 start1 - 22 2C00-2E61> A9 FF 8D 01 + mva #$ff portb - 23 2C05 A9 B2 8D 30 02 A9 + mwa #DL_pre dlptrs - 24 2C0F A9 21 lda #@dmactl(narrow|dma) ; narrow screen width, DL on - 25 2C11 8D 2F 02 sta dmactls - 26 2C14 A9 00 8D C6 02 mva #0 COLOR2 - 27 2C19 8D 1A D0 sta COLBAK - 28 2C1C A9 0F 8D C5 02 mva #15 COLOR1 - 29 2C21 20 9A 2C jsr wait_for_releasing_keyz - 30 2C24 20 82 2F jsr PlayMusic - 31 2C27 leet_anim - 32 ; test for going further - 33 2C27 AD 1F D0 lda CONSOL - 34 2C2A C9 07 cmp #7 - 35 2C2C D0 65 bne leet_end - 36 ; check keyboard - 37 2C2E AD 0F D2 lda SKSTAT - 38 2C31 C9 F7 cmp #$f7 ; SHIFT - 39 2C33 F0 5E beq leet_end - 40 2C35 C9 FF cmp #$ff - 41 2C37 D0 5A bne leet_end - 42 2C39 AD 10 D0 lda TRIG0 - 43 2C3C F0 55 beq leet_end - 44 - 45 - 46 2C3E A9 D2 85 80 A9 2C + mwa #pre_screen temp_w - 47 2C46 A9 62 85 85 A9 2E + mwa #leet_screen temp_w3 - 48 2C4E A0 00 ldy #0 - 49 @ - 50 2C50 B1 80 lda (temp_w),y - 51 2C52 F0 20 beq next_letter ; ignore zeroes - 52 ;is the letter leetable? - 53 2C54 C9 61 cmp #"a" - 54 2C56 90 1C bcc next_letter - 55 2C58 C9 7B cmp #"z"+1 - 56 2C5A B0 18 bcs next_letter - 57 ;letter is leetable - 58 2C5C F0 16 beq next_letter - 59 2C5E 38 sec - 60 2C5F E9 61 sbc #"a" - 61 2C61 A8 tay ;save the letter - 62 2C62 AD 0A D2 lda RANDOM - 63 2C65 29 03 and #%00000011 ; 0-3 - 64 2C67 AA tax - 65 2C68 BD 5A 2E lda leet_speeks_l,x - 66 2C6B 85 83 sta temp_w2 - 67 2C6D BD 5E 2E lda leet_speeks_h,x - 68 2C70 85 84 sta temp_w2+1 - 69 2C72 B1 83 lda (temp_w2),y - 70 2C74 next_letter - 71 2C74 A0 00 ldy #0 - 72 2C76 91 85 sta (temp_w3),y - 73 2C78 E6 80 D0 02 E6 81 inw temp_w - 74 2C7E E6 85 D0 02 E6 86 inw temp_w3 - 75 2C84 A5 81 C9 2D D0 04 + cpw temp_w #pre_screen_end - 76 2C8E F0 97 beq leet_anim - 77 2C90 4C 50 2C jmp @- - 78 - 79 2C93 leet_end - 80 2C93 20 9F 2F jsr StopMusic - 81 2C96 20 9A 2C jsr wait_for_releasing_keyz - 82 2C99 60 rts - 83 - 84 - 85 2C9A .proc wait_for_releasing_keyz - 86 2C9A AD 1F D0 @ lda CONSOL - 87 2C9D C9 07 cmp #7 - 88 2C9F D0 F9 bne @- - 89 ; check keyboard - 90 2CA1 AD 0F D2 @ lda SKSTAT - 91 2CA4 C9 F7 cmp #$f7 ; SHIFT - 92 2CA6 F0 F9 beq @- - 93 2CA8 C9 FF cmp #$ff - 94 2CAA D0 F5 bne @- - 95 2CAC AD 10 D0 @ lda TRIG0 - 96 2CAF F0 FB beq @- - 97 2CB1 60 rts - 98 .endp - 99 - 100 2CB2 DL_pre - 101 2CB2 70 70 70 70 70 70 + :8 .by SKIP8 - 102 2CBA 42 .by LMS+MODE2 - 103 2CBB 62 2E .wo leet_screen - 104 2CBD 00 02 .by SKIP1, MODE2 - 105 2CBF 70 .by SKIP8 - 106 2CC0 00 02 .by SKIP1, MODE2 - 107 2CC2 70 .by SKIP8 - 108 2CC3 00 02 00 02 00 02 + :6 .by SKIP1, MODE2 - 109 2CCF 41 .by JVB - 110 2CD0 B2 2C .wo DL_pre - 111 2CD2 pre_screen - 112 ; 01234567890123456789012345678901" - 113 2CD2 74 68 69 73 00 6C + dta "this little game was created in " - 114 2CF2 00 66 6F 75 72 00 + dta " four evenings before SV2K24SE " - 115 2D12 73 6F 72 72 79 00 + dta "sorry for technical difficulties" - 116 2D32 63 6F 64 65 1A 00 + dta "code: " - 117 2D52 00 00 00 00 00 00 + dta " pecus & pirx " - 118 2D72 73 6F 75 6E 64 1A + dta "sound: " - 119 2D92 00 00 00 00 00 00 + dta " alex, jochen hippel " - 120 2DB2 67 66 78 1A 00 00 + dta "gfx: " - 121 2DD2 00 00 00 00 00 00 + dta " alphabet, inc. " - 122 2DF2 pre_screen_end - 123 2DF2 leet_speek1 - 124 2DF2 61 62 63 64 65 66 + dta "abcdefghijklmnopqrstuvwxyz" - 125 2E0C leet_speek2 - 126 2E0C 21 22 23 24 25 26 + dta "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - 127 2E26 leet_speek3 - 128 2E26 14 18 3B 09 65 26 + dta "48[)eF9-|jk_mn0p@r57uvw*y2" - 129 2E40 leet_speek4 - 130 2E40 3E 62 08 1E 5B 41 + dta "^b(>",$5b,$41,"gh1",$4c+$80,"k",$4b+$80,"M\",$54,$49+$80,"q",$51,"5",$57,"uvwxy/" - 131 - 132 2E5A leet_speeks_l - 133 2E5A F2 .by leet_speek1 - 139 2E5F 2E .by >leet_speek2 - 140 2E60 2E .by >leet_speek3 - 141 2E61 2E .by >leet_speek4 - 142 2E62 leet_screen - 143 = 2E62 .ds 32*9 - 144 2F82 leet_screen_end - 145 ;-------------------------------------------------- - 146 2F82 .proc PlayMusic - 147 2F82-2FB1> A9 00 85 E0 + mwa #MUSIC_DATA song_start_ptr - 148 2F8A A9 7F 85 E2 A9 35 + mwa #MUSIC_DATA_END song_end_ptr - 149 2F92 20 03 20 jsr init_song - 150 2F95 VMAIN VBLinterrupt,7 ; jsr SetVBL -Macro: VMAIN [Source: MACRO.ASM] - 15 2F95 A0 A9 LDY # VBLINTERRUPT - 17 2F99 A9 07 LDA #7 - 18 2F9B 20 5C E4 JSR SETVBV -Source: tech_diff.asm - 151 2F9E 60 rts - 152 .endp - 153 2F9F .proc StopMusic - 154 2F9F VMAIN XITVBV,7 ; jsr SetVBL -Macro: VMAIN [Source: MACRO.ASM] - 15 2F9F A0 62 LDY # XITVBV - 17 2FA3 A9 07 LDA #7 - 18 2FA5 20 5C E4 JSR SETVBV -Source: tech_diff.asm - 155 2FA8 60 rts - 156 .endp - 157 2FA9 .proc VBLinterrupt - 158 2FA9 20 00 20 jsr PLAYER - 159 2FAC 68 pla - 160 2FAD A8 tay - 161 2FAE 68 pla - 162 2FAF AA tax - 163 2FB0 68 pla - 164 2FB1 40 rti - 165 .endp - 166 2FB2 .align $100 - 167 3000 MUSIC_DATA - 168 3000-357E> 00 04 88 00 + ins '../music/Title.lzss' ; title music - 169 357F MUSIC_DATA_END - 170 - 171 02E2-02E3> 00 2C ini start1 - 172 ;--------------------------------------------------- - 173 - 174 org $3000 - 175 3000 screen - 176 3000-98F4> FF FE FF F0 + ins 'difficulties.bmp',+62 - 177 3410 DL - 178 3410 70 70 70 70 70 70 + :13 .by SKIP8 - 179 341D 4F .by MODEF+LMS - 180 341E 00 30 .wo screen - 181 3420 0F 0F 0F 0F 0F 0F + :25 .by MODEF - 182 3439 41 .by JVB - 183 343A 10 34 .wo DL - 184 - 185 343C start - 186 343C A9 10 8D 30 02 A9 + mwa #DL dlptrs - 187 3446 A9 3E lda #@dmactl(standard|dma|players|missiles|lineX1) ; normal screen width, DL on, P/M on - 188 3448 8D 2F 02 sta dmactls - 189 344B A9 00 8D C6 02 mva #0 COLOR2 - 190 3450 8D 1A D0 sta COLBAK - 191 3453 A9 0F 8D C5 02 mva #15 COLOR1 - 192 3458 POKEY_INIT -Macro: POKEY_INIT [Source: MACRO.ASM] - 2 3458 A9 00 8D 08 D2 mva #0 AUDCTL - 3 345D A9 03 8D 0F D2 mva #3 SKSTAT -Source: tech_diff.asm - 193 3462 pause 3 -Macro: PAUSE [Source: MACRO.ASM] - 2 3462 A2 03 ldx #3 - 3 3464 ?PAUSELOOP - 3 3464 AD 0B D4 ?ze LDA VCOUNT - 4 3467 C9 10 cmp #16 ; if line<16 then wait for line>15 (long VBI protection) - 5 3469 90 F9 bcc ?ze - 6 346B E9 0A sbc #10 ; last lines correction - 7 346D CD 0B D4 ?wa cmp VCOUNT - 8 3470 90 FB bcc ?wa - 9 3472 CD 0B D4 ?wf cmp VCOUNT - 10 3475 B0 FB bcs ?wf -Source: tech_diff.asm - 5 3477 CA dex - 6 3478 D0 EA bne ?PAUSELOOP -Source: tech_diff.asm - 194 347A A9 00 lda #0 - 195 347C 8D 0E D4 sta $d40e ; NMI OFF - 196 347F 78 sei ; IRQ OFF - 197 - 198 - 199 ;-----playa-da-sampla----- - 200 3480 A2 00 ldx #0 - 201 - 202 3482 please_wait_loop - 203 3482 BD C9 98 lda samples_l,x - 204 3485 8D 99 34 sta sample_load - 205 3488 BD D4 98 lda samples_h,x - 206 348B 8D 9A 34 sta sample_load+1 - 207 - 208 348E BD DF 98 lda samples_end_l,x - 209 3491 85 80 sta temp_w - 210 3493 BD EA 98 lda samples_end_h,x - 211 3496 85 81 sta temp_w+1 - 212 - 213 @ - 214 3498 AD FF FF lda sample_load: $ffff - 215 349B A8 tay - 216 349C 38 sec - 217 349D 6A 6A 6A 6A :4 ror - 218 34A1 8D 01 D2 sta AUDC1 - 219 34A4 8D 03 D2 sta AUDC2 - 220 34A7 8D 05 D2 sta AUDC3 - 221 ;sta AUDC4 - 222 34AA 8D 0A D4 sta wsync ;------------ - 223 ; test for going further - 224 34AD AD 1F D0 lda CONSOL - 225 34B0 C9 07 cmp #7 - 226 34B2 D0 50 bne exit_tech_diff - 227 ; check keyboard - 228 34B4 AD 0F D2 lda SKSTAT - 229 34B7 C9 F7 cmp #$f7 ; SHIFT - 230 34B9 F0 49 beq exit_tech_diff - 231 34BB C9 FF cmp #$ff - 232 34BD D0 45 bne exit_tech_diff - 233 34BF 8D 0A D4 sta wsync ;------------ - 234 34C2 AD 10 D0 lda TRIG0 - 235 34C5 F0 3D beq exit_tech_diff - 236 34C7 8D 0A D4 sta wsync ;------------ - 237 - 238 34CA 98 tya - 239 34CB 29 0F and #$0F - 240 34CD 09 10 ora #$10 - 241 34CF 8D 01 D2 sta AUDC1 - 242 34D2 8D 03 D2 sta AUDC2 - 243 34D5 8D 05 D2 sta AUDC3 - 244 ;sta AUDC4 - 245 - 246 - 247 34D8 EE 99 34 D0 03 EE + inw sample_load - 248 34E0 8D 0A D4 sta wsync - 249 34E3 AD 9A 34 C5 81 D0 + cpw sample_load temp_w - 250 34EF 8D 0A D4 sta wsync - 251 34F2 F0 06 beq @+ - 252 34F4 8D 0A D4 sta wsync - 253 34F7 4C 98 34 jmp @- - 254 @ - 255 34FA E8 inx - 256 34FB E0 0B cpx #11 - 257 34FD D0 02 A2 01 sne:ldx #1 - 258 3501 4C 82 34 jmp please_wait_loop - 259 - 260 3504 exit_tech_diff - 261 ; wait for releasing keyz - 262 3504 AD 1F D0 @ lda CONSOL - 263 3507 C9 07 cmp #7 - 264 3509 D0 F9 bne @- - 265 ; check keyboard - 266 350B AD 0F D2 @ lda SKSTAT - 267 350E C9 F7 cmp #$f7 ; SHIFT - 268 3510 F0 F9 beq @- - 269 3512 C9 FF cmp #$ff - 270 3514 D0 F5 bne @- - 271 3516 AD 10 D0 @ lda TRIG0 - 272 3519 F0 FB beq @- - 273 - 274 ; - 275 351B A9 40 lda #$40 - 276 351D 8D 0E D4 sta $d40e ; NMI On - 277 3520 58 cli ; IRQ on - 278 3521 A9 00 8D 2F 02 mva #0 DMACTLS - 279 3526 8D 00 D4 sta dmactl - 280 3529 60 rts - 281 - 282 352A sample1 - 283 352A 57 77 77 77 77 77 + ins 'wait1.wav.bin' - 284 4896 sample_end1 - 285 4896 sample2 - 286 4896 43 33 33 33 33 33 + ins 'wait2.wav.bin' - 287 6B7B sample_end2 - 288 6B7B sample3 - 289 6B7B 32 22 22 22 22 22 + ins 'wait3.wav.bin' - 290 6E15 sample_end3 - 291 6E15 sample4 - 292 6E15 56 66 66 66 66 66 + ins 'wait4.wav.bin' - 293 70AF sample_end4 - 294 70AF sample5 - 295 70AF 57 67 67 67 67 67 + ins 'wait5.wav.bin' - 296 98C9 sample_end5 - 297 - 298 98C9 samples_l - 299 98C9 2A .by sample1 - 312 98D5 48 .by >sample2 - 313 98D6 6B .by >sample3 - 314 98D7 48 .by >sample2 - 315 98D8 6E .by >sample4 - 316 98D9 48 .by >sample2 - 317 98DA 70 .by >sample5 - 318 98DB 48 .by >sample2 - 319 98DC 6B .by >sample3 - 320 98DD 48 .by >sample2 - 321 98DE 6E .by >sample4 - 322 98DF samples_end_l - 323 98DF 96 .by sample_end1 - 336 98EB 6B .by >sample_end2 - 337 98EC 6E .by >sample_end3 - 338 98ED 6B .by >sample_end2 - 339 98EE 70 .by >sample_end4 - 340 98EF 6B .by >sample_end2 - 341 98F0 98 .by >sample_end5 - 342 98F1 6B .by >sample_end2 - 343 98F2 6E .by >sample_end3 - 344 98F3 6B .by >sample_end2 - 345 98F4 70 .by >sample_end4 - 346 98F5 finito - 347 02E2-02E3> 3C 34 ini start diff --git a/intro/tech_diff.xex b/intro/tech_diff.xex index 9be7ad1..f3208ed 100644 Binary files a/intro/tech_diff.xex and b/intro/tech_diff.xex differ diff --git a/music/playlzs16.asm b/music/playlzs16.asm index 71223ba..6e2d073 100644 --- a/music/playlzs16.asm +++ b/music/playlzs16.asm @@ -54,6 +54,12 @@ bit_data .ds 1 inx bne @- + ;clear pokey_save + ldx #8 +@ sta pokey_save,x + dex + bpl @- + mva #1 bit_data ; here initializes song pointer: @@ -85,6 +91,13 @@ cbuf ; Play one frame of the song ; .proc play_frame + ; play old frame on second pokey + ldx #8 +@ lda pokey_save,x + sta POKEY+$10,x + dex + bpl @- + lda #>buffers sta bptr+1 @@ -128,6 +141,7 @@ do_copy_byte: store: ldy cur_pos sta POKEY, x ; Store to output and buffer + sta pokey_save,x sta (bptr), y skip_chn: @@ -168,7 +182,8 @@ get_byte jmp @- */ - +pokey_save + .ds 9 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .align $100 diff --git a/tdc.xex b/tdc.xex index af9853d..52a4ec2 100644 Binary files a/tdc.xex and b/tdc.xex differ