* * GAME09 interpreter * ifp1 use defsfile endc nam Game09 ttl Game09 tylg set Prgrm+Objct atrv set ReEnt+rev rev set $01 edition set 1 mod eom,name,tylg,atrv,start,size org 0 DP00 equ $00 VAROFS equ $04 variabble base 'A'-'Z' until $36 DP38 equ $38 variable end DP42 equ $42 program copy pointer DP44 equ $44 variable 'a'-'z' until $76 DP48 equ $48 """ DP4A equ $4A "#" next line no DP4B equ $4B DP4E equ $4E "%" DP4F equ $4F DP50 equ $50 "&" program end DP52 equ $52 DP58 equ $58 program max DP7C equ $7C DP7E equ $7E "=" program top DP82 equ $82 "@" DP83 equ $83 DP84 equ $84 rvalue pointer DP86 equ $86 input line (except lineno) DP88 equ $88 DP8A equ $8A DP8C equ $8C DP8D equ $8D DP8E equ $8E DP94 equ $94 DPWORK rmb 2 $96 DPSTK rmb 2 $98 lineb0 rmb 2 $9A linetop rmb 2 $9C lineb9a rmb 2 $9E lineb9b rmb 2 $A0 lineend rmb 2 $A2 ustack rmb 128 linebuf rmb 252 ifeq Level-2 program rmb $d000-. else program rmb $6000 endc size equ . name fcs "Game09" fcb edition coldstart start * clrb * os9 F$Exit LC000 BRA LC005 LC002 NOP LC003 BRA warmst LC005 TFR U,D TFR A,DP STU PRMPT,PCR LBSR LPRNT LC032 LBSR GETCLN BCS LC06D STX <$42 LBSR LC1D3 BEQ GAMETP LC03E BSR LC09C LC040 BMI GAMETP STX <$42 LC044 LEAX +$02,X LDA ,X+ CMPA #$20 BNE LC05B LBSR LC1D3 BNE LC05F LEAX +$01,X TST ,X BRA LC040 LC057 LDS OPCMD,PCR LC680 LDX ,Y BMI LC6E7 CMPX ,S BEQ LC68C LEAY +$05,Y BRA LC680 LC68C LEAY +$03,Y LEAS +$02,S LDX ,S LDA -$01,Y BEQ LC6C3 PSHS Y,A LDA #$20 LC69A CMPA ,X+ BEQ LC69A LDA ,-X STX +$03,S LC6A2 BITA #$DF BEQ LC6B0 CMPA #$2C , BEQ LC6AE CMPA #$22 " BNE LCXXX leax 1,x PSHS X LDA #$22 LXX1 tst ,x beq LXX2 cmpa ,x+ bne LXX1 clr -1,x leax 1,x LXX2 PULS D BRA LC6B3 LCXXX BSR LC6C9 BRA LC6B3 LC6AE LEAX +$01,X LC6B0 LDD #$FFFF LC6B3 PSHU B,A LDA ,X DEC ,S BNE LC6A2 LDD +$03,S STX +$03,S TFR D,X PULS Y,A LC6C3 LDD ,Y JSR D,Y PULS PC,U,X LC6C9 LBSR EXPR LC6CC PSHS B LDB ,X BITB #$DF BEQ LC6E5 CMPB #$2C BEQ LC6E3 CMPB #$29 BEQ LC6E3 PULS B LBSR LC29C BRA LC6CC LC6E3 LEAX +$01,X LC6E5 PULS PC,B LC6E7 PULS U,X,B,A LBRA LC4F9 LC6EC LEAX +$01,X LDB ,X+ LC6F0 LDA ,X+ BEQ LC6F8 CMPA #$22 BNE LC6F0 LC6F8 CLRA RTS OUTCH PSHS X,Y BRA OUTCH1 GETCH PSHS A,B,X,Y GETCH0 LDA #0 LEAX 1,S LDY #1 OS9 I$Read BCS GETCH0 PULS A,B,X,Y,PC OUTCH1 PSHS A,B LEAX 1,S LDA #1 LDY #1 OS9 I$Write PULS A,B,X,Y,PC SENSE PSHS X,Y,D LDA #0 LDB #SS.Ready OS9 I$GetStt CMPB #$F6 Not Ready BNE RSENSE CLRB PULS X,Y,D,PC RSENSE ORCC #1 set carry to indicate ready RNSENSE PULS X,Y,D,PC * COMMAND TABLE CONSIST.... * COMMAND NAME (2 BYTE) * PARAMETER COUNT (1 BYTE) * OFSET TO SUBROUTIE FROM HERE (1 WORD) ************************** OPCMD FCB 'A','T',2 START LINE,STEP FDB CAUTO-* FCB 'R','N',3 RENUM first line no,inc,renum start FDB RENUM-* FCB 'L','D',1 load file-name FDB pload-* * FCB 'R','D',3 DISK READ address,track,sector * FDB GETDK-* * FCB 'W','R',3 DISK WRITE * FDB PUTDK-* FCB 'S','Y',0 TO SYSTEM FDB SYSTEM-* FDB -1,-1,-1,-1,-1,-1 ************************* RENUM LDD ,U++ BPL LC762 CLRA CLRB LC762 STD <$4A LBSR LC09C BMI LC789 LDD ,U++ BPL LC770 LDD #$00A LC770 LDY ,U++ BPL LC779 LDY #1000 LC779 STY ,X++ LBSR LC173 LEAY D,Y LC781 TST ,X+ BNE LC781 TST ,X BPL LC779 LC789 RTS CAUTO LDD ,U++ BPL LC791 LDD #$00A LC791 STD <$8A LDD ,U BEQ LC79E BPL LC79C LDD #1000 LC79C STD <$88 LC79E CLR <$8C RTS BSR LC7B6 * LBSR LCD09 BNE LC7B1 RTS BSR LC7B6 * LBSR LCD0C BNE LC7B1 RTS LC7B1 LDA #$44 LBRA LC4F9 LC7B6 LDX +$04,U LDA +$03,U LDB +$01,U RTS SYSTEM clrb os9 F$Exit rts pload pshs a,x,y ldx ,u lda #1 os9 I$Open bcs ploader1 sta ,s ploadloop lda ,s ldx