From 88471f94f0d025a34e96864378fec8a309f0d12b Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 27 Jan 2018 19:23:41 -0800 Subject: [PATCH 01/40] Fix LEAVE for lambda funcs --- src/toolsrc/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/toolsrc/codegen.c b/src/toolsrc/codegen.c index 2a7459e..c8eb630 100755 --- a/src/toolsrc/codegen.c +++ b/src/toolsrc/codegen.c @@ -512,7 +512,7 @@ void emit_lambdafunc(int tag, char *name, int cparams, t_opseq *lambda_seq) emit_seq(lambda_seq); emit_pending_seq(); if (cparams) - printf("\t%s\t$5A\t\t\t; LEAVE\n", DB); + printf("\t%s\t$5A,$%02X\t\t\t; LEAVE\t%d\n", DB, cparams*2, cparams*2); else printf("\t%s\t$5C\t\t\t; RET\n", DB); } From 3c3643833357fcd0445b71a82cc7de211c7e52d9 Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Tue, 30 Jan 2018 16:27:18 -0800 Subject: [PATCH 02/40] a bit smaller, another attempt at 65c02 VM --- src/vmsrc/cmd.pla | 2 +- src/vmsrc/plvm02.s | 6 +- src/vmsrc/plvmc02.s | 1482 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1485 insertions(+), 5 deletions(-) create mode 100644 src/vmsrc/plvmc02.s diff --git a/src/vmsrc/cmd.pla b/src/vmsrc/cmd.pla index 76c6e58..01b715a 100755 --- a/src/vmsrc/cmd.pla +++ b/src/vmsrc/cmd.pla @@ -808,7 +808,7 @@ asm reloc(modfix, modofst, bytecode, rld)#3 PLA AND #$10 ; EXTERN REF - EXIT BNE RLDEX - LDY #$00 ; FIXUP=*ADDR+MODOFST + TAY ; FIXUP=*ADDR+MODOFST LDA (DST),Y INY CLC diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index ee3c912..4a1023d 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -698,15 +698,13 @@ LNOT LDA ESTKL,X ORA ESTKH,X BNE + LDA #$FF - STA ESTKL,X - STA ESTKH,X - JMP NEXTOP + BNE ++ ;* ;* CONSTANT ;* ZERO DEX + LDA #$00 - STA ESTKL,X +++ STA ESTKL,X STA ESTKH,X JMP NEXTOP CFFB LDA #$FF diff --git a/src/vmsrc/plvmc02.s b/src/vmsrc/plvmc02.s new file mode 100644 index 0000000..ba2eeb1 --- /dev/null +++ b/src/vmsrc/plvmc02.s @@ -0,0 +1,1482 @@ +;********************************************************** +;* +;* APPLE ][ enhanced 64K/128K PLASMA INTERPRETER +;* +;* SYSTEM ROUTINES AND LOCATIONS +;* +;********************************************************** +;* +;* MONITOR SPECIAL LOCATIONS +;* +CSWL = $36 +CSWH = $37 +PROMPT = $33 +;* +;* PRODOS +;* +PRODOS = $BF00 +DEVCNT = $BF31 ; GLOBAL PAGE DEVICE COUNT +DEVLST = $BF32 ; GLOBAL PAGE DEVICE LIST +MACHID = $BF98 ; GLOBAL PAGE MACHINE ID BYTE +RAMSLOT = $BF26 ; SLOT 3, DRIVE 2 IS /RAM'S DRIVER VECTOR +NODEV = $BF10 +;* +;* HARDWARE ADDRESSES +;* +KEYBD = $C000 +CLRKBD = $C010 +SPKR = $C030 +LCRDEN = $C080 +LCWTEN = $C081 +ROMEN = $C082 +LCRWEN = $C083 +LCBNK2 = $00 +LCBNK1 = $08 +ALTZPOFF= $C008 +ALTZPON = $C009 +ALTRDOFF= $C002 +ALTRDON = $C003 +ALTWROFF= $C004 +ALTWRON = $C005 + !SOURCE "vmsrc/plvmzp.inc" +PSR = TMP+2 +DVSIGN = PSR+1 +DROP = $EF +NEXTOP = $F0 +FETCHOP = NEXTOP+1 +IP = FETCHOP+1 +IPL = IP +IPH = IPL+1 +OPIDX = FETCHOP+6 +OPPAGE = OPIDX+1 +STRBUF = $0280 +INTERP = $03D0 +;****************************** +;* * +;* INTERPRETER INITIALIZATION * +;* * +;****************************** +* = $2000 + LDX #$FE + TXS + LDX #$00 + STX $01FF +;* +;* DISCONNECT /RAM +;* + ;SEI ; DISABLE /RAM + LDA MACHID + AND #$30 + CMP #$30 + BNE RAMDONE + LDA RAMSLOT + CMP NODEV + BNE RAMCONT + LDA RAMSLOT+1 + CMP NODEV+1 + BEQ RAMDONE +RAMCONT LDY DEVCNT +RAMLOOP LDA DEVLST,Y + AND #$F3 + CMP #$B3 + BEQ GETLOOP + DEY + BPL RAMLOOP + BMI RAMDONE +GETLOOP LDA DEVLST+1,Y + STA DEVLST,Y + BEQ RAMEXIT + INY + BNE GETLOOP +RAMEXIT LDA NODEV + STA RAMSLOT + LDA NODEV+1 + STA RAMSLOT+1 + DEC DEVCNT +RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE +;* +;* MOVE VM INTO LANGUAGE CARD +;* + BIT LCRWEN+LCBNK2 + BIT LCRWEN+LCBNK2 + LDA #VMCORE + STA SRCH + LDY #$00 + STY DSTL + LDA #$D0 + STA DSTH +- LDA (SRC),Y ; COPY VM+CMD INTO LANGUAGE CARD + STA (DST),Y + INY + BNE - + INC SRCH + INC DSTH + LDA DSTH + CMP #$E0 + BNE - +;* +;* MOVE FIRST PAGE OF 'BYE' INTO PLACE +;* + STY SRCL + LDA #$D1 + STA SRCH +- LDA (SRC),Y + STA $1000,Y + INY + BNE - +;* +;* SAVE DEFAULT COMMAND INTERPRETER PATH IN LC +;* + JSR PRODOS ; GET PREFIX + !BYTE $C7 + !WORD GETPFXPARMS + LDY STRBUF ; APPEND "CMD" + LDA #"/" + CMP STRBUF,Y + BEQ + + INY + STA STRBUF,Y ++ LDA #"C" + INY + STA STRBUF,Y + LDA #"M" + INY + STA STRBUF,Y + LDA #"D" + INY + STA STRBUF,Y + STY STRBUF + BIT LCRWEN+LCBNK2 ; COPY TO LC FOR BYE + BIT LCRWEN+LCBNK2 +- LDA STRBUF,Y + STA LCDEFCMD,Y + DEY + BPL - + JMP CMDENTRY +GETPFXPARMS !BYTE 1 + !WORD STRBUF ; PATH STRING GOES HERE +;************************************************ +;* * +;* LANGUAGE CARD RESIDENT PLASMA VM STARTS HERE * +;* * +;************************************************ +VMCORE = * + !PSEUDOPC $D000 { +;**************** +;* * +;* OPCODE TABLE * +;* * +;**************** + !ALIGN 255,0 +OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E + !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E + !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E + !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E + !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E + !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E +;* +;* ENTER INTO BYTECODE INTERPRETER +;* +DINTRP PLY + PLA + INY + BNE + + INC ++ STY IPL + STA IPH + LDY #$00 + LDA #>OPTBL + STA OPPAGE + JMP FETCHOP +IINTRP PLA + STA TMPL + PLA + STA TMPH + LDY #$02 + LDA (TMP),Y + STA IPH + DEY + LDA (TMP),Y + STA IPL + DEY ++ LDA #>OPTBL + STA OPPAGE + JMP FETCHOP +IINTRPX PHP + PLA + STA PSR + SEI + PLA + STA TMPL + PLA + STA TMPH + LDY #$02 + LDA (TMP),Y + STA IPH + DEY + LDA (TMP),Y + STA IPL + DEY + LDA #>OPXTBL + STA OPPAGE + STA ALTRDON + JMP FETCHOP +;************************************************************ +;* * +;* 'BYE' PROCESSING - COPIED TO $1000 ON PRODOS BYE COMMAND * +;* * +;************************************************************ + !ALIGN 255,0 + !PSEUDOPC $1000 { +BYE LDY DEFCMD +- LDA DEFCMD,Y ; SET DEFAULT COMMAND WHEN CALLED FROM 'BYE' + STA STRBUF,Y + DEY + BPL - +; INY ; CLEAR CMDLINE BUFF +; STY $01FF +CMDENTRY = * +; +; DEACTIVATE 80 COL CARDS +; + BIT ROMEN + LDY #4 +- LDA DISABLE80,Y + ORA #$80 + JSR $FDED + DEY + BPL - + BIT $C054 ; SET TEXT MODE + BIT $C051 + BIT $C05F + JSR $FC58 ; HOME +; +; INSTALL PAGE 0 FETCHOP ROUTINE +; + LDY #$0F +- LDA PAGE0,Y + STA DROP,Y + DEY + BPL - +; +; SET JMPTMP OPCODE +; + LDA #$4C + STA JMPTMP +; +; INSTALL PAGE 3 VECTORS +; + LDY #$12 +- LDA PAGE3,Y + STA INTERP,Y + DEY + BPL - +; +; READ CMD INTO MEMORY +; + JSR PRODOS ; CLOSE EVERYTHING + !BYTE $CC + !WORD CLOSEPARMS + BNE FAIL + JSR PRODOS ; OPEN CMD + !BYTE $C8 + !WORD OPENPARMS + BNE FAIL + LDA REFNUM + STA READPARMS+1 + JSR PRODOS + !BYTE $CA + !WORD READPARMS + BNE FAIL + JSR PRODOS + !BYTE $CC + !WORD CLOSEPARMS + BNE FAIL +; +; INIT VM ENVIRONMENT STACK POINTERS +; +; LDA #$00 + STA $01FF ; CLEAR CMDLINE BUFF + STA PPL ; INIT FRAME POINTER + STA IFPL + LDA #$BF + STA PPH + STA IFPH + LDX #$FE ; INIT STACK POINTER (YES, $FE. SEE GETS) + TXS + LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX +; +; CHANGE CMD STRING TO SYSPATH STRING +; + LDA STRBUF + SEC + SBC #$03 + STA STRBUF + JMP $2000 ; JUMP TO LOADED SYSTEM COMMAND +; +; PRINT FAIL MESSAGE, WAIT FOR KEYPRESS, AND REBOOT +; +FAIL INC $3F4 ; INVALIDATE POWER-UP BYTE + LDY #33 +- LDA FAILMSG,Y + ORA #$80 + JSR $FDED + DEY + BPL - + JSR $FD0C ; WAIT FOR KEYPRESS + JMP ($FFFC) ; RESET +OPENPARMS !BYTE 3 + !WORD STRBUF + !WORD $0800 +REFNUM !BYTE 0 +READPARMS !BYTE 4 + !BYTE 0 + !WORD $2000 + !WORD $9F00 + !WORD 0 +CLOSEPARMS !BYTE 1 + !BYTE 0 +DISABLE80 !BYTE 21, 13, '1', 26, 13 +FAILMSG !TEXT "...TESER OT YEK YNA .DMC GNISSIM" +PAGE0 = * +;****************************** +;* * +;* INTERP BYTECODE INNER LOOP * +;* * +;****************************** + !PSEUDOPC DROP { + INX ; DROP @ $EF + INY ; NEXTOP @ $F0 + LDA $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 + STA OPIDX + JMP (OPTBL) ; OPIDX AND OPPAGE MAP OVER OPTBL +} +PAGE3 = * +;* +;* PAGE 3 VECTORS INTO INTERPRETER +;* + !PSEUDOPC $03D0 { + BIT LCRDEN+LCBNK2 ; $03D0 - DIRECT INTERP ENTRY + JMP DINTRP + BIT LCRDEN+LCBNK2 ; $03D6 - INDIRECT INTERP ENTRY + JMP IINTRP + BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY + JMP IINTRPX +} +DEFCMD !FILL 28 +ENDBYE = * +} +LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY +;***************** +;* * +;* OPXCODE TABLE * +;* * +;***************** + !ALIGN 255,0 +OPXTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E + !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E + !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E + !WORD BRNCH,IBRNCH,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E + !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLB,DLW ; 60 62 64 66 68 6A 6C 6E + !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E +;* +;* ADD TOS TO TOS-1 +;* +ADD LDA ESTKL,X + CLC + ADC ESTKL+1,X + STA ESTKL+1,X + LDA ESTKH,X + ADC ESTKH+1,X + STA ESTKH+1,X + JMP DROP +;* +;* SUB TOS FROM TOS-1 +;* +SUB LDA ESTKL+1,X + SEC + SBC ESTKL,X + STA ESTKL+1,X + LDA ESTKH+1,X + SBC ESTKH,X + STA ESTKH+1,X + JMP DROP +;* +;* SHIFT TOS LEFT BY 1, ADD TO TOS-1 +;* +IDXW LDA ESTKL,X + ASL + ROL ESTKH,X + CLC + ADC ESTKL+1,X + STA ESTKL+1,X + LDA ESTKH,X + ADC ESTKH+1,X + STA ESTKH+1,X + JMP DROP +;* +;* MUL TOS-1 BY TOS +;* +MUL STY IPY + LDY #$10 + LDA ESTKL+1,X + EOR #$FF + STA TMPL + LDA ESTKH+1,X + EOR #$FF + STA TMPH + LDA #$00 + STA ESTKL+1,X ; PRODL +; STA ESTKH+1,X ; PRODH +MULLP LSR TMPH ; MULTPLRH + ROR TMPL ; MULTPLRL + BCS + + STA ESTKH+1,X ; PRODH + LDA ESTKL,X ; MULTPLNDL + ADC ESTKL+1,X ; PRODL + STA ESTKL+1,X + LDA ESTKH,X ; MULTPLNDH + ADC ESTKH+1,X ; PRODH ++ ASL ESTKL,X ; MULTPLNDL + ROL ESTKH,X ; MULTPLNDH + DEY + BNE MULLP + STA ESTKH+1,X ; PRODH + LDY IPY + JMP DROP +;* +;* INTERNAL DIVIDE ALGORITHM +;* +_NEG LDA #$00 + SEC + SBC ESTKL,X + STA ESTKL,X + LDA #$00 + SBC ESTKH,X + STA ESTKH,X + RTS +_DIV STY IPY + LDY #$11 ; #BITS+1 + STZ TMPL ; REMNDRL + STZ TMPH ; REMNDRH + LDA ESTKH,X + AND #$80 + STA DVSIGN + BPL + + JSR _NEG + INC DVSIGN ++ LDA ESTKH+1,X + BPL + + INX + JSR _NEG + DEX + INC DVSIGN + BNE _DIV1 ++ ORA ESTKL+1,X ; DVDNDL + BEQ _DIVEX +_DIV1 ASL ESTKL+1,X ; DVDNDL + ROL ESTKH+1,X ; DVDNDH + DEY + BCC _DIV1 +_DIVLP ROL TMPL ; REMNDRL + ROL TMPH ; REMNDRH + LDA TMPL ; REMNDRL + CMP ESTKL,X ; DVSRL + LDA TMPH ; REMNDRH + SBC ESTKH,X ; DVSRH + BCC + + STA TMPH ; REMNDRH + LDA TMPL ; REMNDRL + SBC ESTKL,X ; DVSRL + STA TMPL ; REMNDRL + SEC ++ ROL ESTKL+1,X ; DVDNDL + ROL ESTKH+1,X ; DVDNDH + DEY + BNE _DIVLP +_DIVEX LDY IPY + RTS +;* +;* NEGATE TOS +;* +NEG LDA #$00 + SEC + SBC ESTKL,X + STA ESTKL,X + LDA #$00 + SBC ESTKH,X + STA ESTKH,X + JMP NEXTOP +;* +;* DIV TOS-1 BY TOS +;* +DIV JSR _DIV + INX + LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 + BCS NEG + JMP NEXTOP +;* +;* MOD TOS-1 BY TOS +;* +MOD JSR _DIV + INX + LDA TMPL ; REMNDRL + STA ESTKL,X + LDA TMPH ; REMNDRH + STA ESTKH,X + LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND + BMI NEG + JMP NEXTOP +;* +;* DIVMOD TOS-1 BY TOS +;* +DIVMOD JSR _DIV + LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 + BCC + + INX + JSR _NEG + DEX ++ LDA TMPL ; REMNDRL + STA ESTKL,X + LDA TMPH ; REMNDRH + STA ESTKH,X + LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND + BMI NEG + JMP NEXTOP +;* +;* INCREMENT TOS +;* +INCR INC ESTKL,X + BEQ INCR1 + JMP NEXTOP +INCR1 INC ESTKH,X + JMP NEXTOP +;* +;* DECREMENT TOS +;* +DECR LDA ESTKL,X + BEQ DECR1 + DEC ESTKL,X + JMP NEXTOP +DECR1 DEC ESTKL,X + DEC ESTKH,X + JMP NEXTOP +;* +;* BITWISE COMPLIMENT TOS +;* +COMP LDA #$FF + EOR ESTKL,X + STA ESTKL,X + LDA #$FF + EOR ESTKH,X + STA ESTKH,X + JMP NEXTOP +;* +;* BITWISE AND TOS TO TOS-1 +;* +BAND LDA ESTKL+1,X + AND ESTKL,X + STA ESTKL+1,X + LDA ESTKH+1,X + AND ESTKH,X + STA ESTKH+1,X + JMP DROP +;* +;* INCLUSIVE OR TOS TO TOS-1 +;* +IOR LDA ESTKL+1,X + ORA ESTKL,X + STA ESTKL+1,X + LDA ESTKH+1,X + ORA ESTKH,X + STA ESTKH+1,X + JMP DROP +;* +;* EXLUSIVE OR TOS TO TOS-1 +;* +XOR LDA ESTKL+1,X + EOR ESTKL,X + STA ESTKL+1,X + LDA ESTKH+1,X + EOR ESTKH,X + STA ESTKH+1,X + JMP DROP +;* +;* SHIFT TOS-1 LEFT BY TOS +;* +SHL STY IPY + LDA ESTKL,X + CMP #$08 + BCC SHL1 + LDY ESTKL+1,X + STY ESTKH+1,X + STZ ESTKL+1,X + SBC #$08 +SHL1 TAY + BEQ SHL3 + LDA ESTKL+1,X +SHL2 ASL + ROL ESTKH+1,X + DEY + BNE SHL2 + STA ESTKL+1,X +SHL3 LDY IPY + JMP DROP +;* +;* SHIFT TOS-1 RIGHT BY TOS +;* +SHR STY IPY + LDA ESTKL,X + CMP #$08 + BCC SHR2 + LDY ESTKH+1,X + STY ESTKL+1,X + CPY #$80 + LDY #$00 + BCC SHR1 + DEY +SHR1 STY ESTKH+1,X + SEC + SBC #$08 +SHR2 TAY + BEQ SHR4 + LDA ESTKH+1,X +SHR3 CMP #$80 + ROR + ROR ESTKL+1,X + DEY + BNE SHR3 + STA ESTKH+1,X +SHR4 LDY IPY + JMP DROP +;* +;* LOGICAL AND +;* +LAND LDA ESTKL+1,X + ORA ESTKH+1,X + BEQ LAND2 + LDA ESTKL,X + ORA ESTKH,X + BEQ LAND1 + LDA #$FF +LAND1 STA ESTKL+1,X + STA ESTKH+1,X +LAND2 JMP DROP +;* +;* LOGICAL OR +;* +LOR LDA ESTKL,X + ORA ESTKH,X + ORA ESTKL+1,X + ORA ESTKH+1,X + BEQ LOR1 + LDA #$FF + STA ESTKL+1,X + STA ESTKH+1,X +LOR1 JMP DROP +;* +;* DUPLICATE TOS +;* +DUP DEX + LDA ESTKL+1,X + STA ESTKL,X + LDA ESTKH+1,X + STA ESTKH,X + JMP NEXTOP +;* +;* LOGICAL NOT +;* +LNOT LDA ESTKL,X + ORA ESTKH,X + BNE + + LDA #$FF + BNE ++ +;* +;* CONSTANT +;* +ZERO DEX ++ LDA #$00 +++ STA ESTKL,X + STA ESTKH,X + JMP NEXTOP +CFFB LDA #$FF + !BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address +CB LDA #$00 + DEX + STA ESTKH,X + INY + LDA (IP),Y + STA ESTKL,X + JMP NEXTOP +;* +;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) +;* +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +LA INY ;+INC_IP + BMI - + DEX + LDA (IP),Y + STA ESTKL,X + INY + LDA (IP),Y + STA ESTKH,X + JMP NEXTOP +CW DEX + INY ;+INC_IP + LDA (IP),Y + STA ESTKL,X + INY + LDA (IP),Y + STA ESTKH,X + JMP NEXTOP +;* +;* CONSTANT STRING +;* +CS DEX + INY ;+INC_IP + TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK + CLC + ADC IPL + STA IPL + STA ESTKL,X + LDA #$00 + ADC IPH + STA IPH + STA ESTKH,X + LDA (IP) + TAY + JMP NEXTOP +; +CSX DEX + INY ;+INC_IP + TYA ; NORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDA PPL ; SCAN POOL FOR STRING ALREADY THERE + STA TMPL + LDA PPH + STA TMPH +_CMPPSX ;LDA TMPH ; CHECK FOR END OF POOL + CMP IFPH + BCC _CMPSX ; CHECK FOR MATCHING STRING + BNE _CPYSX ; BEYOND END OF POOL, COPY STRING OVER + LDA TMPL + CMP IFPL + BCS _CPYSX ; AT OR BEYOND END OF POOL, COPY STRING OVER +_CMPSX STA ALTRDOFF + LDA (TMP) ; COMPARE STRINGS FROM AUX MEM TO STRINGS IN MAIN MEM + STA ALTRDON + CMP (IP) ; COMPARE STRING LENGTHS + BNE _CNXTSX1 + TAY +_CMPCSX STA ALTRDOFF + LDA (TMP),Y ; COMPARE STRING CHARS FROM END + STA ALTRDON + CMP (IP),Y + BNE _CNXTSX + DEY + BNE _CMPCSX + LDA TMPL ; MATCH - SAVE EXISTING ADDR ON ESTK AND MOVE ON + STA ESTKL,X + LDA TMPH + STA ESTKH,X + BNE _CEXSX +_CNXTSX STA ALTRDOFF + LDA (TMP) + STA ALTRDON +_CNXTSX1 SEC + ADC TMPL + STA TMPL + BCC _CMPPSX + INC TMPH + BNE _CMPPSX +_CPYSX LDA (IP) ; COPY STRING FROM AUX TO MAIN MEM POOL + TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK + EOR #$FF + CLC + ADC PPL + STA PPL + STA ESTKL,X + LDA #$FF + ADC PPH + STA PPH + STA ESTKH,X ; COPY STRING FROM AUX MEM BYTECODE TO MAIN MEM POOL +_CPYSX1 LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE + STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE + DEY + CPY #$FF + BNE _CPYSX1 +_CEXSX LDA (IP) ; SKIP TO NEXT OP ADDR AFTER STRING + TAY + JMP NEXTOP +;* +;* LOAD VALUE FROM ADDRESS TAG +;* +LB LDA ESTKL,X + STA ESTKH-1,X + LDA (ESTKH-1,X) + STA ESTKL,X + STZ ESTKH,X + JMP NEXTOP +LW LDA ESTKL,X + STA ESTKH-1,X + LDA (ESTKH-1,X) + STA ESTKL,X + INC ESTKH-1,X + BEQ + + LDA (ESTKH-1,X) + STA ESTKH,X + JMP NEXTOP ++ INC ESTKH,X + LDA (ESTKH-1,X) + STA ESTKH,X + JMP NEXTOP +; +LBX LDA ESTKL,X + STA ESTKH-1,X + STA ALTRDOFF + LDA (ESTKH-1,X) + STA ESTKL,X + STZ ESTKH,X + STA ALTRDON + JMP NEXTOP +LWX LDA ESTKL,X + STA ESTKH-1,X + STA ALTRDOFF + LDA (ESTKH-1,X) + STA ESTKL,X + INC ESTKH-1,X + BEQ + + LDA (ESTKH-1,X) + STA ESTKH,X + STA ALTRDON + JMP NEXTOP ++ INC ESTKH,X + LDA (ESTKH-1,X) + STA ESTKH,X + STA ALTRDON + JMP NEXTOP +;* +;* LOAD ADDRESS OF LOCAL FRAME OFFSET +;* +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +LLA INY ;+INC_IP + BMI - + LDA (IP),Y + DEX + CLC + ADC IFPL + STA ESTKL,X + LDA #$00 + ADC IFPH + STA ESTKH,X + JMP NEXTOP +;* +;* LOAD VALUE FROM LOCAL FRAME OFFSET +;* +LLB INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + DEX + LDA (IFP),Y + STA ESTKL,X + STZ ESTKH,X + LDY IPY + JMP NEXTOP +LLW INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + DEX + LDA (IFP),Y + STA ESTKL,X + INY + LDA (IFP),Y + STA ESTKH,X + LDY IPY + JMP NEXTOP +; +LLBX INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + DEX + STA ALTRDOFF + LDA (IFP),Y + STA ESTKL,X + STZ ESTKH,X + STA ALTRDON + LDY IPY + JMP NEXTOP +LLWX INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + DEX + STA ALTRDOFF + LDA (IFP),Y + STA ESTKL,X + INY + LDA (IFP),Y + STA ESTKH,X + STA ALTRDON + LDY IPY + JMP NEXTOP +;* +;* LOAD VALUE FROM ABSOLUTE ADDRESS +;* +LAB INY ;+INC_IP + LDA (IP),Y + STA ESTKH-2,X + INY ;+INC_IP + LDA (IP),Y + STA ESTKH-1,X + LDA (ESTKH-2,X) + DEX + STA ESTKL,X + STZ ESTKH,X + JMP NEXTOP +LAW INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + LDA (TMP) + DEX + STA ESTKL,X + LDY #$01 + LDA (TMP),Y + STA ESTKH,X + LDY IPY + JMP NEXTOP +; +LABX INY ;+INC_IP + LDA (IP),Y + STA ESTKH-2,X + INY ;+INC_IP + LDA (IP),Y + STA ESTKH-1,X + STA ALTRDOFF + LDA (ESTKH-2,X) + DEX + STA ESTKL,X + STZ ESTKH,X + STA ALTRDON + JMP NEXTOP +LAWX INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + STA ALTRDOFF + LDA (TMP) + DEX + STA ESTKL,X + LDY #$01 + LDA (TMP),Y + STA ESTKH,X + STA ALTRDON + LDY IPY + JMP NEXTOP +;* +;* STORE VALUE TO ADDRESS +;* +SB LDA ESTKL,X + STA ESTKH-1,X + LDA ESTKL+1,X + STA (ESTKH-1,X) + INX + JMP DROP +SW LDA ESTKL,X + STA ESTKH-1,X + LDA ESTKL+1,X + STA (ESTKH-1,X) + LDA ESTKH+1,X + INC ESTKH-1,X + BEQ + + STA (ESTKH-1,X) + INX + JMP DROP ++ INC ESTKH,X + STA (ESTKH-1,X) + INX + JMP DROP +;* +;* STORE VALUE TO LOCAL FRAME OFFSET +;* +SLB INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + LDA ESTKL,X + STA (IFP),Y + LDY IPY + BMI FIXDROP + JMP DROP +SLW INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + LDA ESTKL,X + STA (IFP),Y + INY + LDA ESTKH,X + STA (IFP),Y + LDY IPY + BMI FIXDROP + JMP DROP +FIXDROP TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP DROP +;* +;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK +;* +DLB INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + LDA ESTKL,X + STA (IFP),Y + LDY IPY + JMP NEXTOP +DLW INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + LDA ESTKL,X + STA (IFP),Y + INY + LDA ESTKH,X + STA (IFP),Y + LDY IPY + JMP NEXTOP +;* +;* STORE VALUE TO ABSOLUTE ADDRESS +;* +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +SAB INY ;+INC_IP + BMI - + LDA (IP),Y + STA ESTKH-2,X + INY ;+INC_IP + LDA (IP),Y + STA ESTKH-1,X + LDA ESTKL,X + STA (ESTKH-2,X) + JMP DROP +SAW INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + LDA ESTKL,X + STA (TMP) + LDY #$01 + LDA ESTKH,X + STA (TMP),Y + LDY IPY + BMI FIXDROP + JMP DROP +;* +;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK +;* +DAB INY ;+INC_IP + LDA (IP),Y + STA ESTKH-2,X + INY ;+INC_IP + LDA (IP),Y + STA ESTKH-1,X + LDA ESTKL,X + STA (ESTKH-2,X) + JMP NEXTOP +DAW INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + LDA ESTKL,X + STA (TMP) + LDY #$01 + LDA ESTKH,X + STA (TMP),Y + LDY IPY + JMP NEXTOP +;* +;* COMPARES +;* +ISEQ LDA ESTKL,X + CMP ESTKL+1,X + BNE ISFLS + LDA ESTKH,X + CMP ESTKH+1,X + BNE ISFLS +ISTRU LDA #$FF + STA ESTKL+1,X + STA ESTKH+1,X + JMP DROP +; +ISNE LDA ESTKL,X + CMP ESTKL+1,X + BNE ISTRU + LDA ESTKH,X + CMP ESTKH+1,X + BNE ISTRU +ISFLS STZ ESTKL+1,X + STZ ESTKH+1,X + JMP DROP +; +ISGE LDA ESTKL+1,X + CMP ESTKL,X + LDA ESTKH+1,X + SBC ESTKH,X + BVS + + BPL ISTRU + BMI ISFLS ++ BPL ISFLS + BMI ISTRU +; +ISGT LDA ESTKL,X + CMP ESTKL+1,X + LDA ESTKH,X + SBC ESTKH+1,X + BVS + + BMI ISTRU + BPL ISFLS ++ BMI ISFLS + BPL ISTRU +; +ISLE LDA ESTKL,X + CMP ESTKL+1,X + LDA ESTKH,X + SBC ESTKH+1,X + BVS + + BPL ISTRU + BMI ISFLS ++ BPL ISFLS + BMI ISTRU +; +ISLT LDA ESTKL+1,X + CMP ESTKL,X + LDA ESTKH+1,X + SBC ESTKH,X + BVS + + BMI ISTRU + BPL ISFLS ++ BMI ISFLS + BPL ISTRU +;* +;* BRANCHES +;* +BRTRU INX + LDA ESTKH-1,X + ORA ESTKL-1,X + BNE BRNCH +NOBRNCH INY ;+INC_IP + INY + BMI FIXNEXT + JMP NEXTOP +FIXNEXT TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP NEXTOP +BRFLS INX + LDA ESTKH-1,X + ORA ESTKL-1,X + BNE NOBRNCH +BRNCH TYA ; FLATTEN IP + SEC + ADC IPL + STA TMPL + LDA #$00 + ADC IPH + STA TMPH ; ADD BRANCH OFFSET + LDA (TMP) + ;CLC ; BETTER NOT CARRY OUT OF IP+Y + ADC TMPL + STA IPL + LDY #$01 + LDA (TMP),Y + ADC TMPH + STA IPH + DEY + JMP FETCHOP +BREQ INX + LDA ESTKL-1,X + CMP ESTKL,X + BNE NOBRNCH + LDA ESTKH-1,X + CMP ESTKH,X + BEQ BRNCH + BNE NOBRNCH +BRNE INX + LDA ESTKL-1,X + CMP ESTKL,X + BNE BRNCH + LDA ESTKH-1,X + CMP ESTKH,X + BEQ NOBRNCH + BNE BRNCH +BRGT INX + LDA ESTKL-1,X + CMP ESTKL,X + LDA ESTKH-1,X + SBC ESTKH,X + BVS + + BPL NOBRNCH + BMI BRNCH ++ BPL BRNCH + BMI NOBRNCH +BRLT INX + LDA ESTKL,X + CMP ESTKL-1,X + LDA ESTKH,X + SBC ESTKH-1,X + BVS + + BPL NOBRNCH + BMI BRNCH ++ BPL BRNCH + BMI NOBRNCH +IBRNCH TYA ; FLATTEN IP + CLC + ADC IPL + STA TMPL + LDA #$00 + TAY + ADC IPH + STA TMPH ; ADD BRANCH OFFSET + LDA TMPL + ;CLC ; BETTER NOT CARRY OUT OF IP+Y + ADC ESTKL,X + STA IPL + LDA TMPH + ADC ESTKH,X + STA IPH + JMP DROP +;* +;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) +;* +CALL INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + TYA + CLC + ADC IPL + PHA + LDA IPH + ADC #$00 + PHA + JSR JMPTMP + PLA + STA IPH + PLA + STA IPL + LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE + LDY #$01 + JMP FETCHOP +; +CALLX INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + TYA + CLC + ADC IPL + PHA + LDA IPH + ADC #$00 + PHA + STA ALTRDOFF + LDA PSR + PHA + PLP + JSR JMPTMP + PHP + PLA + STA PSR + SEI + STA ALTRDON + PLA + STA IPH + PLA + STA IPL + LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE + LDY #$01 + JMP FETCHOP +;* +;* INDIRECT CALL TO ADDRESS (NATIVE CODE) +;* +ICAL LDA ESTKL,X + STA TMPL + LDA ESTKH,X + STA TMPH + INX + TYA + CLC + ADC IPL + PHA + LDA IPH + ADC #$00 + PHA + JSR JMPTMP + PLA + STA IPH + PLA + STA IPL + LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE + LDY #$01 + JMP FETCHOP +; +ICALX LDA ESTKL,X + STA TMPL + LDA ESTKH,X + STA TMPH + INX + TYA + CLC + ADC IPL + PHA + LDA IPH + ADC #$00 + PHA + STA ALTRDOFF + LDA PSR + PHA + PLP + JSR JMPTMP + PHP + PLA + STA PSR + STA ALTRDON + PLA + STA IPH + PLA + STA IPL + LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE + LDY #$01 + JMP FETCHOP +;* +;* JUMP INDIRECT TRHOUGH TMP +;* +;JMPTMP JMP (TMP) +;* +;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT +;* +ENTER LDA IFPH + PHA ; SAVE ON STACK FOR LEAVE + LDA IFPL + PHA + INY + LDA (IP),Y + EOR #$FF ; ALLOCATE FRAME + SEC + ADC PPL + STA PPL + STA IFPL + LDA #$FF + ADC PPH + STA PPH + STA IFPH + INY + LDA (IP),Y + BEQ + + ASL + TAY +- LDA ESTKH,X + DEY + STA (IFP),Y + LDA ESTKL,X + INX + DEY + STA (IFP),Y + BNE - ++ LDY #$03 + JMP FETCHOP +;* +;* LEAVE FUNCTION +;* +LEAVEX INY ;+INC_IP + LDA (IP),Y + CLC + ADC IFPL + STA PPL + LDA #$00 + ADC IFPH + STA PPH + PLA ; RESTORE PREVIOUS FRAME + STA IFPL + PLA + STA IFPH +RETX STA ALTRDOFF + LDA PSR + PHA + PLP + RTS +LEAVE INY ;+INC_IP + LDA (IP),Y + CLC + ADC IFPL + STA PPL + LDA #$00 + ADC IFPH + STA PPH + PLA ; RESTORE PREVIOUS FRAME + STA IFPL + PLA + STA IFPH +RET RTS +VMEND = * +} From 11dea3d389ba08154dedb46a7da852eff602d790 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 31 Jan 2018 14:36:50 -0800 Subject: [PATCH 03/40] Capture Peter's 65C02 optimizations into standard VM --- PLASMA-PRE3.PO | Bin 143360 -> 143360 bytes src/vmsrc/plvm02.s | 389 +++++++++++- src/vmsrc/plvm802.s | 8 +- src/vmsrc/plvmc02.s | 1482 ------------------------------------------- 4 files changed, 371 insertions(+), 1508 deletions(-) delete mode 100644 src/vmsrc/plvmc02.s diff --git a/PLASMA-PRE3.PO b/PLASMA-PRE3.PO index 592b9d2296601cb5a0c7d002f08bba65d5ef2171..e5cb0c318cce6bd26defea7d47b049eb0c91247b 100644 GIT binary patch delta 20 ccmZp8z|ru4W5eMjMz!W6N!yPkG1{C30Ax7{T>t<8 delta 20 ccmZp8z|ru4W5eMjMvdkpN!yPkG1{C30Ax)GUjP6A diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index 4a1023d..cf6c6e9 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -5,6 +5,7 @@ ;* SYSTEM ROUTINES AND LOCATIONS ;* ;********************************************************** + !CPU 65C02 ;* ;* MONITOR SPECIAL LOCATIONS ;* @@ -127,9 +128,16 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE INY BNE - ;* +;* INSERT 65C02 OPS IF APPLICABLE +;* + LDA #$00 + INC + BEQ + + JSR C02OPS +;* ;* SAVE DEFAULT COMMAND INTERPRETER PATH IN LC ;* - JSR PRODOS ; GET PREFIX ++ JSR PRODOS ; GET PREFIX !BYTE $C7 !WORD GETPFXPARMS LDY STRBUF ; APPEND "CMD" @@ -614,21 +622,21 @@ XOR LDA ESTKL+1,X SHL STY IPY LDA ESTKL,X CMP #$08 - BCC SHL1 + BCC + LDY ESTKL+1,X STY ESTKH+1,X LDY #$00 STY ESTKL+1,X SBC #$08 -SHL1 TAY - BEQ SHL3 ++ TAY + BEQ + LDA ESTKL+1,X -SHL2 ASL +- ASL ROL ESTKH+1,X DEY - BNE SHL2 + BNE - STA ESTKL+1,X -SHL3 LDY IPY ++ LDY IPY JMP DROP ;* ;* SHIFT TOS-1 RIGHT BY TOS @@ -636,26 +644,26 @@ SHL3 LDY IPY SHR STY IPY LDA ESTKL,X CMP #$08 - BCC SHR2 + BCC ++ LDY ESTKH+1,X STY ESTKL+1,X CPY #$80 LDY #$00 - BCC SHR1 + BCC + DEY -SHR1 STY ESTKH+1,X ++ STY ESTKH+1,X SEC SBC #$08 -SHR2 TAY - BEQ SHR4 +++ TAY + BEQ + LDA ESTKH+1,X -SHR3 CMP #$80 +- CMP #$80 ROR ROR ESTKL+1,X DEY - BNE SHR3 + BNE - STA ESTKH+1,X -SHR4 LDY IPY ++ LDY IPY JMP DROP ;* ;* LOGICAL AND @@ -698,19 +706,26 @@ LNOT LDA ESTKL,X ORA ESTKH,X BNE + LDA #$FF - BNE ++ + STA ESTKL,X + STA ESTKH,X + JMP NEXTOP ;* ;* CONSTANT ;* ZERO DEX + LDA #$00 -++ STA ESTKL,X + STA ESTKL,X STA ESTKH,X JMP NEXTOP -CFFB LDA #$FF - !BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address -CB LDA #$00 - DEX +CFFB DEX + LDA #$FF + STA ESTKH,X + INY + LDA (IP),Y + STA ESTKL,X + JMP NEXTOP +CB DEX + LDA #$00 STA ESTKH,X INY LDA (IP),Y @@ -1131,8 +1146,9 @@ SAW INY ;+INC_IP LDA ESTKH,X STA (TMP),Y LDY IPY - BMI FIXDROP + BMI + JMP DROP + JMP FIXDROP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* @@ -1500,3 +1516,332 @@ LEAVE INY ;+INC_IP RET RTS VMEND = * } +;*************************************** +;* * +;* 65C02 OPS TO OVERWRITE STANDARD OPS * +;* * +;*************************************** +C02OPS LDA #DINTRP + LDY #(CDINTRPEND-CDINTRP) + JSR OPCPY +CDINTRP PLY + PLA + INY + BNE + + INC ++ STY IPL + STA IPH + LDY #$00 + LDA #>OPTBL + STA OPPAGE + JMP FETCHOP +CDINTRPEND +; + LDA #ZERO + LDY #(CZEROEND-CZERO) + JSR OPCPY +CZERO DEX + STZ ESTKL,X + STZ ESTKH,X + JMP NEXTOP +CZEROEND +; + LDA #CB + LDY #(CCBEND-CCB) + JSR OPCPY +CCB DEX + STZ ESTKH,X + INY + LDA (IP),Y + STA ESTKL,X + JMP NEXTOP +CCBEND +; + LDA #CS + LDY #(CCSEND-CCS) + JSR OPCPY +CCS DEX + INY ;+INC_IP + TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK + CLC + ADC IPL + STA IPL + STA ESTKL,X + LDA #$00 + ADC IPH + STA IPH + STA ESTKH,X + LDA (IP) + TAY + JMP NEXTOP +CCSEND +; + LDA #SHL + LDY #(CSHLEND-CSHL) + JSR OPCPY +CSHL STY IPY + LDA ESTKL,X + CMP #$08 + BCC + + LDY ESTKL+1,X + STY ESTKH+1,X + STZ ESTKL+1,X + SBC #$08 ++ TAY + BEQ + + LDA ESTKL+1,X +- ASL + ROL ESTKH+1,X + DEY + BNE - + STA ESTKL+1,X ++ LDY IPY + JMP DROP +CSHLEND +; + LDA #LB + LDY #(CLBEND-CLB) + JSR OPCPY +CLB LDA ESTKL,X + STA ESTKH-1,X + LDA (ESTKH-1,X) + STA ESTKL,X + STZ ESTKH,X + JMP NEXTOP +CLBEND +; + LDA #LBX + LDY #(CLBXEND-CLBX) + JSR OPCPY +CLBX LDA ESTKL,X + STA ESTKH-1,X + STA ALTRDOFF + LDA (ESTKH-1,X) + STA ESTKL,X + STZ ESTKH,X + STA ALTRDON + JMP NEXTOP +CLBXEND +; + LDA #LLB + LDY #(CLLBEND-CLLB) + JSR OPCPY +CLLB INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + DEX + LDA (IFP),Y + STA ESTKL,X + STZ ESTKH,X + LDY IPY + JMP NEXTOP +CLLBEND +; + LDA #LLBX + LDY #(CLLBXEND-CLLBX) + JSR OPCPY +CLLBX INY ;+INC_IP + LDA (IP),Y + STY IPY + TAY + DEX + STA ALTRDOFF + LDA (IFP),Y + STA ESTKL,X + STZ ESTKH,X + STA ALTRDON + LDY IPY + JMP NEXTOP +CLLBXEND +; + LDA #LAB + LDY #(CLABEND-CLAB) + JSR OPCPY +CLAB INY ;+INC_IP + LDA (IP),Y + STA ESTKH-2,X + INY ;+INC_IP + LDA (IP),Y + STA ESTKH-1,X + LDA (ESTKH-2,X) + DEX + STA ESTKL,X + STZ ESTKH,X + JMP NEXTOP +CLABEND +; + LDA #LAW + LDY #(CLAWEND-CLAW) + JSR OPCPY +CLAW INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + LDA (TMP) + DEX + STA ESTKL,X + LDY #$01 + LDA (TMP),Y + STA ESTKH,X + LDY IPY + JMP NEXTOP +CLAWEND +; + LDA #LABX + LDY #(CLABXEND-CLABX) + JSR OPCPY +CLABX INY ;+INC_IP + LDA (IP),Y + STA ESTKH-2,X + INY ;+INC_IP + LDA (IP),Y + STA ESTKH-1,X + STA ALTRDOFF + LDA (ESTKH-2,X) + DEX + STA ESTKL,X + STZ ESTKH,X + STA ALTRDON + JMP NEXTOP +CLABXEND +; + LDA #LAWX + LDY #(CLAWXEND-CLAWX) + JSR OPCPY +CLAWX INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + STA ALTRDOFF + LDA (TMP) + DEX + STA ESTKL,X + LDY #$01 + LDA (TMP),Y + STA ESTKH,X + STA ALTRDON + LDY IPY + JMP NEXTOP +CLAWXEND +; + LDA #SAW + LDY #(CSAWEND-CSAW) + JSR OPCPY +CSAW INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + LDA ESTKL,X + STA (TMP) + LDY #$01 + LDA ESTKH,X + STA (TMP),Y + LDY IPY + BMI + + JMP DROP ++ JMP FIXDROP +CSAWEND +; + LDA #DAW + LDY #(CDAWEND-CDAW) + JSR OPCPY +CDAW INY ;+INC_IP + LDA (IP),Y + STA TMPL + INY ;+INC_IP + LDA (IP),Y + STA TMPH + STY IPY + LDA ESTKL,X + STA (TMP) + LDY #$01 + LDA ESTKH,X + STA (TMP),Y + LDY IPY + JMP NEXTOP +CDAWEND +; + LDA #ISFLS + LDY #(CISFLSEND-CISFLS) + JSR OPCPY +CISFLS STZ ESTKL+1,X + STZ ESTKH+1,X + JMP DROP +CISFLSEND +; + LDA #BRNCH + LDY #(CBRNCHEND-CBRNCH) + JSR OPCPY +CBRNCH TYA ; FLATTEN IP + SEC + ADC IPL + STA TMPL + LDA #$00 + ADC IPH + STA TMPH ; ADD BRANCH OFFSET + LDA (TMP) + ;CLC ; BETTER NOT CARRY OUT OF IP+Y + ADC TMPL + STA IPL + LDY #$01 + LDA (TMP),Y + ADC TMPH + STA IPH + DEY + JMP FETCHOP +CBRNCHEND +; + RTS +;* +;* COPY OP TO VM +;* +OPCPY STA DST + STX DST+1 + PLA + STA SRC + PLA + STA SRC+1 + TYA + CLC + ADC SRC + TAX + LDA #$00 + ADC SRC+1 + PHA + PHX + INC SRC + BNE + + INC SRC+1 ++ +- LDA (SRC),Y + STA (DST),Y + DEY + BPL - + RTS diff --git a/src/vmsrc/plvm802.s b/src/vmsrc/plvm802.s index c1d10a7..1024c86 100644 --- a/src/vmsrc/plvm802.s +++ b/src/vmsrc/plvm802.s @@ -685,26 +685,26 @@ XOR PLA ;* SHL PLA TAX - BEQ SHLEX + BEQ + LDA TOS,S - ASL DEX BNE - STA TOS,S -SHLEX JMP NEXTOP ++ JMP NEXTOP ;* ;* SHIFT TOS-1 RIGHT BY TOS ;* SHR PLA TAX - BEQ SHREX + BEQ + LDA TOS,S - CMP #$8000 ROR DEX BNE - STA TOS,S -SHREX JMP NEXTOP ++ JMP NEXTOP ;* ;* LOGICAL AND ;* diff --git a/src/vmsrc/plvmc02.s b/src/vmsrc/plvmc02.s deleted file mode 100644 index ba2eeb1..0000000 --- a/src/vmsrc/plvmc02.s +++ /dev/null @@ -1,1482 +0,0 @@ -;********************************************************** -;* -;* APPLE ][ enhanced 64K/128K PLASMA INTERPRETER -;* -;* SYSTEM ROUTINES AND LOCATIONS -;* -;********************************************************** -;* -;* MONITOR SPECIAL LOCATIONS -;* -CSWL = $36 -CSWH = $37 -PROMPT = $33 -;* -;* PRODOS -;* -PRODOS = $BF00 -DEVCNT = $BF31 ; GLOBAL PAGE DEVICE COUNT -DEVLST = $BF32 ; GLOBAL PAGE DEVICE LIST -MACHID = $BF98 ; GLOBAL PAGE MACHINE ID BYTE -RAMSLOT = $BF26 ; SLOT 3, DRIVE 2 IS /RAM'S DRIVER VECTOR -NODEV = $BF10 -;* -;* HARDWARE ADDRESSES -;* -KEYBD = $C000 -CLRKBD = $C010 -SPKR = $C030 -LCRDEN = $C080 -LCWTEN = $C081 -ROMEN = $C082 -LCRWEN = $C083 -LCBNK2 = $00 -LCBNK1 = $08 -ALTZPOFF= $C008 -ALTZPON = $C009 -ALTRDOFF= $C002 -ALTRDON = $C003 -ALTWROFF= $C004 -ALTWRON = $C005 - !SOURCE "vmsrc/plvmzp.inc" -PSR = TMP+2 -DVSIGN = PSR+1 -DROP = $EF -NEXTOP = $F0 -FETCHOP = NEXTOP+1 -IP = FETCHOP+1 -IPL = IP -IPH = IPL+1 -OPIDX = FETCHOP+6 -OPPAGE = OPIDX+1 -STRBUF = $0280 -INTERP = $03D0 -;****************************** -;* * -;* INTERPRETER INITIALIZATION * -;* * -;****************************** -* = $2000 - LDX #$FE - TXS - LDX #$00 - STX $01FF -;* -;* DISCONNECT /RAM -;* - ;SEI ; DISABLE /RAM - LDA MACHID - AND #$30 - CMP #$30 - BNE RAMDONE - LDA RAMSLOT - CMP NODEV - BNE RAMCONT - LDA RAMSLOT+1 - CMP NODEV+1 - BEQ RAMDONE -RAMCONT LDY DEVCNT -RAMLOOP LDA DEVLST,Y - AND #$F3 - CMP #$B3 - BEQ GETLOOP - DEY - BPL RAMLOOP - BMI RAMDONE -GETLOOP LDA DEVLST+1,Y - STA DEVLST,Y - BEQ RAMEXIT - INY - BNE GETLOOP -RAMEXIT LDA NODEV - STA RAMSLOT - LDA NODEV+1 - STA RAMSLOT+1 - DEC DEVCNT -RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE -;* -;* MOVE VM INTO LANGUAGE CARD -;* - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - LDA #VMCORE - STA SRCH - LDY #$00 - STY DSTL - LDA #$D0 - STA DSTH -- LDA (SRC),Y ; COPY VM+CMD INTO LANGUAGE CARD - STA (DST),Y - INY - BNE - - INC SRCH - INC DSTH - LDA DSTH - CMP #$E0 - BNE - -;* -;* MOVE FIRST PAGE OF 'BYE' INTO PLACE -;* - STY SRCL - LDA #$D1 - STA SRCH -- LDA (SRC),Y - STA $1000,Y - INY - BNE - -;* -;* SAVE DEFAULT COMMAND INTERPRETER PATH IN LC -;* - JSR PRODOS ; GET PREFIX - !BYTE $C7 - !WORD GETPFXPARMS - LDY STRBUF ; APPEND "CMD" - LDA #"/" - CMP STRBUF,Y - BEQ + - INY - STA STRBUF,Y -+ LDA #"C" - INY - STA STRBUF,Y - LDA #"M" - INY - STA STRBUF,Y - LDA #"D" - INY - STA STRBUF,Y - STY STRBUF - BIT LCRWEN+LCBNK2 ; COPY TO LC FOR BYE - BIT LCRWEN+LCBNK2 -- LDA STRBUF,Y - STA LCDEFCMD,Y - DEY - BPL - - JMP CMDENTRY -GETPFXPARMS !BYTE 1 - !WORD STRBUF ; PATH STRING GOES HERE -;************************************************ -;* * -;* LANGUAGE CARD RESIDENT PLASMA VM STARTS HERE * -;* * -;************************************************ -VMCORE = * - !PSEUDOPC $D000 { -;**************** -;* * -;* OPCODE TABLE * -;* * -;**************** - !ALIGN 255,0 -OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E - !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E - !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E - !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E - !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E - !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E -;* -;* ENTER INTO BYTECODE INTERPRETER -;* -DINTRP PLY - PLA - INY - BNE + - INC -+ STY IPL - STA IPH - LDY #$00 - LDA #>OPTBL - STA OPPAGE - JMP FETCHOP -IINTRP PLA - STA TMPL - PLA - STA TMPH - LDY #$02 - LDA (TMP),Y - STA IPH - DEY - LDA (TMP),Y - STA IPL - DEY -+ LDA #>OPTBL - STA OPPAGE - JMP FETCHOP -IINTRPX PHP - PLA - STA PSR - SEI - PLA - STA TMPL - PLA - STA TMPH - LDY #$02 - LDA (TMP),Y - STA IPH - DEY - LDA (TMP),Y - STA IPL - DEY - LDA #>OPXTBL - STA OPPAGE - STA ALTRDON - JMP FETCHOP -;************************************************************ -;* * -;* 'BYE' PROCESSING - COPIED TO $1000 ON PRODOS BYE COMMAND * -;* * -;************************************************************ - !ALIGN 255,0 - !PSEUDOPC $1000 { -BYE LDY DEFCMD -- LDA DEFCMD,Y ; SET DEFAULT COMMAND WHEN CALLED FROM 'BYE' - STA STRBUF,Y - DEY - BPL - -; INY ; CLEAR CMDLINE BUFF -; STY $01FF -CMDENTRY = * -; -; DEACTIVATE 80 COL CARDS -; - BIT ROMEN - LDY #4 -- LDA DISABLE80,Y - ORA #$80 - JSR $FDED - DEY - BPL - - BIT $C054 ; SET TEXT MODE - BIT $C051 - BIT $C05F - JSR $FC58 ; HOME -; -; INSTALL PAGE 0 FETCHOP ROUTINE -; - LDY #$0F -- LDA PAGE0,Y - STA DROP,Y - DEY - BPL - -; -; SET JMPTMP OPCODE -; - LDA #$4C - STA JMPTMP -; -; INSTALL PAGE 3 VECTORS -; - LDY #$12 -- LDA PAGE3,Y - STA INTERP,Y - DEY - BPL - -; -; READ CMD INTO MEMORY -; - JSR PRODOS ; CLOSE EVERYTHING - !BYTE $CC - !WORD CLOSEPARMS - BNE FAIL - JSR PRODOS ; OPEN CMD - !BYTE $C8 - !WORD OPENPARMS - BNE FAIL - LDA REFNUM - STA READPARMS+1 - JSR PRODOS - !BYTE $CA - !WORD READPARMS - BNE FAIL - JSR PRODOS - !BYTE $CC - !WORD CLOSEPARMS - BNE FAIL -; -; INIT VM ENVIRONMENT STACK POINTERS -; -; LDA #$00 - STA $01FF ; CLEAR CMDLINE BUFF - STA PPL ; INIT FRAME POINTER - STA IFPL - LDA #$BF - STA PPH - STA IFPH - LDX #$FE ; INIT STACK POINTER (YES, $FE. SEE GETS) - TXS - LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX -; -; CHANGE CMD STRING TO SYSPATH STRING -; - LDA STRBUF - SEC - SBC #$03 - STA STRBUF - JMP $2000 ; JUMP TO LOADED SYSTEM COMMAND -; -; PRINT FAIL MESSAGE, WAIT FOR KEYPRESS, AND REBOOT -; -FAIL INC $3F4 ; INVALIDATE POWER-UP BYTE - LDY #33 -- LDA FAILMSG,Y - ORA #$80 - JSR $FDED - DEY - BPL - - JSR $FD0C ; WAIT FOR KEYPRESS - JMP ($FFFC) ; RESET -OPENPARMS !BYTE 3 - !WORD STRBUF - !WORD $0800 -REFNUM !BYTE 0 -READPARMS !BYTE 4 - !BYTE 0 - !WORD $2000 - !WORD $9F00 - !WORD 0 -CLOSEPARMS !BYTE 1 - !BYTE 0 -DISABLE80 !BYTE 21, 13, '1', 26, 13 -FAILMSG !TEXT "...TESER OT YEK YNA .DMC GNISSIM" -PAGE0 = * -;****************************** -;* * -;* INTERP BYTECODE INNER LOOP * -;* * -;****************************** - !PSEUDOPC DROP { - INX ; DROP @ $EF - INY ; NEXTOP @ $F0 - LDA $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 - STA OPIDX - JMP (OPTBL) ; OPIDX AND OPPAGE MAP OVER OPTBL -} -PAGE3 = * -;* -;* PAGE 3 VECTORS INTO INTERPRETER -;* - !PSEUDOPC $03D0 { - BIT LCRDEN+LCBNK2 ; $03D0 - DIRECT INTERP ENTRY - JMP DINTRP - BIT LCRDEN+LCBNK2 ; $03D6 - INDIRECT INTERP ENTRY - JMP IINTRP - BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY - JMP IINTRPX -} -DEFCMD !FILL 28 -ENDBYE = * -} -LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY -;***************** -;* * -;* OPXCODE TABLE * -;* * -;***************** - !ALIGN 255,0 -OPXTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E - !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E - !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E - !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,IBRNCH,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E - !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLB,DLW ; 60 62 64 66 68 6A 6C 6E - !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E -;* -;* ADD TOS TO TOS-1 -;* -ADD LDA ESTKL,X - CLC - ADC ESTKL+1,X - STA ESTKL+1,X - LDA ESTKH,X - ADC ESTKH+1,X - STA ESTKH+1,X - JMP DROP -;* -;* SUB TOS FROM TOS-1 -;* -SUB LDA ESTKL+1,X - SEC - SBC ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - SBC ESTKH,X - STA ESTKH+1,X - JMP DROP -;* -;* SHIFT TOS LEFT BY 1, ADD TO TOS-1 -;* -IDXW LDA ESTKL,X - ASL - ROL ESTKH,X - CLC - ADC ESTKL+1,X - STA ESTKL+1,X - LDA ESTKH,X - ADC ESTKH+1,X - STA ESTKH+1,X - JMP DROP -;* -;* MUL TOS-1 BY TOS -;* -MUL STY IPY - LDY #$10 - LDA ESTKL+1,X - EOR #$FF - STA TMPL - LDA ESTKH+1,X - EOR #$FF - STA TMPH - LDA #$00 - STA ESTKL+1,X ; PRODL -; STA ESTKH+1,X ; PRODH -MULLP LSR TMPH ; MULTPLRH - ROR TMPL ; MULTPLRL - BCS + - STA ESTKH+1,X ; PRODH - LDA ESTKL,X ; MULTPLNDL - ADC ESTKL+1,X ; PRODL - STA ESTKL+1,X - LDA ESTKH,X ; MULTPLNDH - ADC ESTKH+1,X ; PRODH -+ ASL ESTKL,X ; MULTPLNDL - ROL ESTKH,X ; MULTPLNDH - DEY - BNE MULLP - STA ESTKH+1,X ; PRODH - LDY IPY - JMP DROP -;* -;* INTERNAL DIVIDE ALGORITHM -;* -_NEG LDA #$00 - SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X - RTS -_DIV STY IPY - LDY #$11 ; #BITS+1 - STZ TMPL ; REMNDRL - STZ TMPH ; REMNDRH - LDA ESTKH,X - AND #$80 - STA DVSIGN - BPL + - JSR _NEG - INC DVSIGN -+ LDA ESTKH+1,X - BPL + - INX - JSR _NEG - DEX - INC DVSIGN - BNE _DIV1 -+ ORA ESTKL+1,X ; DVDNDL - BEQ _DIVEX -_DIV1 ASL ESTKL+1,X ; DVDNDL - ROL ESTKH+1,X ; DVDNDH - DEY - BCC _DIV1 -_DIVLP ROL TMPL ; REMNDRL - ROL TMPH ; REMNDRH - LDA TMPL ; REMNDRL - CMP ESTKL,X ; DVSRL - LDA TMPH ; REMNDRH - SBC ESTKH,X ; DVSRH - BCC + - STA TMPH ; REMNDRH - LDA TMPL ; REMNDRL - SBC ESTKL,X ; DVSRL - STA TMPL ; REMNDRL - SEC -+ ROL ESTKL+1,X ; DVDNDL - ROL ESTKH+1,X ; DVDNDH - DEY - BNE _DIVLP -_DIVEX LDY IPY - RTS -;* -;* NEGATE TOS -;* -NEG LDA #$00 - SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X - JMP NEXTOP -;* -;* DIV TOS-1 BY TOS -;* -DIV JSR _DIV - INX - LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 - BCS NEG - JMP NEXTOP -;* -;* MOD TOS-1 BY TOS -;* -MOD JSR _DIV - INX - LDA TMPL ; REMNDRL - STA ESTKL,X - LDA TMPH ; REMNDRH - STA ESTKH,X - LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND - BMI NEG - JMP NEXTOP -;* -;* DIVMOD TOS-1 BY TOS -;* -DIVMOD JSR _DIV - LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 - BCC + - INX - JSR _NEG - DEX -+ LDA TMPL ; REMNDRL - STA ESTKL,X - LDA TMPH ; REMNDRH - STA ESTKH,X - LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND - BMI NEG - JMP NEXTOP -;* -;* INCREMENT TOS -;* -INCR INC ESTKL,X - BEQ INCR1 - JMP NEXTOP -INCR1 INC ESTKH,X - JMP NEXTOP -;* -;* DECREMENT TOS -;* -DECR LDA ESTKL,X - BEQ DECR1 - DEC ESTKL,X - JMP NEXTOP -DECR1 DEC ESTKL,X - DEC ESTKH,X - JMP NEXTOP -;* -;* BITWISE COMPLIMENT TOS -;* -COMP LDA #$FF - EOR ESTKL,X - STA ESTKL,X - LDA #$FF - EOR ESTKH,X - STA ESTKH,X - JMP NEXTOP -;* -;* BITWISE AND TOS TO TOS-1 -;* -BAND LDA ESTKL+1,X - AND ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - AND ESTKH,X - STA ESTKH+1,X - JMP DROP -;* -;* INCLUSIVE OR TOS TO TOS-1 -;* -IOR LDA ESTKL+1,X - ORA ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - ORA ESTKH,X - STA ESTKH+1,X - JMP DROP -;* -;* EXLUSIVE OR TOS TO TOS-1 -;* -XOR LDA ESTKL+1,X - EOR ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - EOR ESTKH,X - STA ESTKH+1,X - JMP DROP -;* -;* SHIFT TOS-1 LEFT BY TOS -;* -SHL STY IPY - LDA ESTKL,X - CMP #$08 - BCC SHL1 - LDY ESTKL+1,X - STY ESTKH+1,X - STZ ESTKL+1,X - SBC #$08 -SHL1 TAY - BEQ SHL3 - LDA ESTKL+1,X -SHL2 ASL - ROL ESTKH+1,X - DEY - BNE SHL2 - STA ESTKL+1,X -SHL3 LDY IPY - JMP DROP -;* -;* SHIFT TOS-1 RIGHT BY TOS -;* -SHR STY IPY - LDA ESTKL,X - CMP #$08 - BCC SHR2 - LDY ESTKH+1,X - STY ESTKL+1,X - CPY #$80 - LDY #$00 - BCC SHR1 - DEY -SHR1 STY ESTKH+1,X - SEC - SBC #$08 -SHR2 TAY - BEQ SHR4 - LDA ESTKH+1,X -SHR3 CMP #$80 - ROR - ROR ESTKL+1,X - DEY - BNE SHR3 - STA ESTKH+1,X -SHR4 LDY IPY - JMP DROP -;* -;* LOGICAL AND -;* -LAND LDA ESTKL+1,X - ORA ESTKH+1,X - BEQ LAND2 - LDA ESTKL,X - ORA ESTKH,X - BEQ LAND1 - LDA #$FF -LAND1 STA ESTKL+1,X - STA ESTKH+1,X -LAND2 JMP DROP -;* -;* LOGICAL OR -;* -LOR LDA ESTKL,X - ORA ESTKH,X - ORA ESTKL+1,X - ORA ESTKH+1,X - BEQ LOR1 - LDA #$FF - STA ESTKL+1,X - STA ESTKH+1,X -LOR1 JMP DROP -;* -;* DUPLICATE TOS -;* -DUP DEX - LDA ESTKL+1,X - STA ESTKL,X - LDA ESTKH+1,X - STA ESTKH,X - JMP NEXTOP -;* -;* LOGICAL NOT -;* -LNOT LDA ESTKL,X - ORA ESTKH,X - BNE + - LDA #$FF - BNE ++ -;* -;* CONSTANT -;* -ZERO DEX -+ LDA #$00 -++ STA ESTKL,X - STA ESTKH,X - JMP NEXTOP -CFFB LDA #$FF - !BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address -CB LDA #$00 - DEX - STA ESTKH,X - INY - LDA (IP),Y - STA ESTKL,X - JMP NEXTOP -;* -;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) -;* -- TYA ; RENORMALIZE IP - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ LDY #$FF -LA INY ;+INC_IP - BMI - - DEX - LDA (IP),Y - STA ESTKL,X - INY - LDA (IP),Y - STA ESTKH,X - JMP NEXTOP -CW DEX - INY ;+INC_IP - LDA (IP),Y - STA ESTKL,X - INY - LDA (IP),Y - STA ESTKH,X - JMP NEXTOP -;* -;* CONSTANT STRING -;* -CS DEX - INY ;+INC_IP - TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK - CLC - ADC IPL - STA IPL - STA ESTKL,X - LDA #$00 - ADC IPH - STA IPH - STA ESTKH,X - LDA (IP) - TAY - JMP NEXTOP -; -CSX DEX - INY ;+INC_IP - TYA ; NORMALIZE IP - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ LDA PPL ; SCAN POOL FOR STRING ALREADY THERE - STA TMPL - LDA PPH - STA TMPH -_CMPPSX ;LDA TMPH ; CHECK FOR END OF POOL - CMP IFPH - BCC _CMPSX ; CHECK FOR MATCHING STRING - BNE _CPYSX ; BEYOND END OF POOL, COPY STRING OVER - LDA TMPL - CMP IFPL - BCS _CPYSX ; AT OR BEYOND END OF POOL, COPY STRING OVER -_CMPSX STA ALTRDOFF - LDA (TMP) ; COMPARE STRINGS FROM AUX MEM TO STRINGS IN MAIN MEM - STA ALTRDON - CMP (IP) ; COMPARE STRING LENGTHS - BNE _CNXTSX1 - TAY -_CMPCSX STA ALTRDOFF - LDA (TMP),Y ; COMPARE STRING CHARS FROM END - STA ALTRDON - CMP (IP),Y - BNE _CNXTSX - DEY - BNE _CMPCSX - LDA TMPL ; MATCH - SAVE EXISTING ADDR ON ESTK AND MOVE ON - STA ESTKL,X - LDA TMPH - STA ESTKH,X - BNE _CEXSX -_CNXTSX STA ALTRDOFF - LDA (TMP) - STA ALTRDON -_CNXTSX1 SEC - ADC TMPL - STA TMPL - BCC _CMPPSX - INC TMPH - BNE _CMPPSX -_CPYSX LDA (IP) ; COPY STRING FROM AUX TO MAIN MEM POOL - TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK - EOR #$FF - CLC - ADC PPL - STA PPL - STA ESTKL,X - LDA #$FF - ADC PPH - STA PPH - STA ESTKH,X ; COPY STRING FROM AUX MEM BYTECODE TO MAIN MEM POOL -_CPYSX1 LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE - STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE - DEY - CPY #$FF - BNE _CPYSX1 -_CEXSX LDA (IP) ; SKIP TO NEXT OP ADDR AFTER STRING - TAY - JMP NEXTOP -;* -;* LOAD VALUE FROM ADDRESS TAG -;* -LB LDA ESTKL,X - STA ESTKH-1,X - LDA (ESTKH-1,X) - STA ESTKL,X - STZ ESTKH,X - JMP NEXTOP -LW LDA ESTKL,X - STA ESTKH-1,X - LDA (ESTKH-1,X) - STA ESTKL,X - INC ESTKH-1,X - BEQ + - LDA (ESTKH-1,X) - STA ESTKH,X - JMP NEXTOP -+ INC ESTKH,X - LDA (ESTKH-1,X) - STA ESTKH,X - JMP NEXTOP -; -LBX LDA ESTKL,X - STA ESTKH-1,X - STA ALTRDOFF - LDA (ESTKH-1,X) - STA ESTKL,X - STZ ESTKH,X - STA ALTRDON - JMP NEXTOP -LWX LDA ESTKL,X - STA ESTKH-1,X - STA ALTRDOFF - LDA (ESTKH-1,X) - STA ESTKL,X - INC ESTKH-1,X - BEQ + - LDA (ESTKH-1,X) - STA ESTKH,X - STA ALTRDON - JMP NEXTOP -+ INC ESTKH,X - LDA (ESTKH-1,X) - STA ESTKH,X - STA ALTRDON - JMP NEXTOP -;* -;* LOAD ADDRESS OF LOCAL FRAME OFFSET -;* -- TYA ; RENORMALIZE IP - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ LDY #$FF -LLA INY ;+INC_IP - BMI - - LDA (IP),Y - DEX - CLC - ADC IFPL - STA ESTKL,X - LDA #$00 - ADC IFPH - STA ESTKH,X - JMP NEXTOP -;* -;* LOAD VALUE FROM LOCAL FRAME OFFSET -;* -LLB INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - DEX - LDA (IFP),Y - STA ESTKL,X - STZ ESTKH,X - LDY IPY - JMP NEXTOP -LLW INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - DEX - LDA (IFP),Y - STA ESTKL,X - INY - LDA (IFP),Y - STA ESTKH,X - LDY IPY - JMP NEXTOP -; -LLBX INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - DEX - STA ALTRDOFF - LDA (IFP),Y - STA ESTKL,X - STZ ESTKH,X - STA ALTRDON - LDY IPY - JMP NEXTOP -LLWX INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - DEX - STA ALTRDOFF - LDA (IFP),Y - STA ESTKL,X - INY - LDA (IFP),Y - STA ESTKH,X - STA ALTRDON - LDY IPY - JMP NEXTOP -;* -;* LOAD VALUE FROM ABSOLUTE ADDRESS -;* -LAB INY ;+INC_IP - LDA (IP),Y - STA ESTKH-2,X - INY ;+INC_IP - LDA (IP),Y - STA ESTKH-1,X - LDA (ESTKH-2,X) - DEX - STA ESTKL,X - STZ ESTKH,X - JMP NEXTOP -LAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - INY ;+INC_IP - LDA (IP),Y - STA TMPH - STY IPY - LDA (TMP) - DEX - STA ESTKL,X - LDY #$01 - LDA (TMP),Y - STA ESTKH,X - LDY IPY - JMP NEXTOP -; -LABX INY ;+INC_IP - LDA (IP),Y - STA ESTKH-2,X - INY ;+INC_IP - LDA (IP),Y - STA ESTKH-1,X - STA ALTRDOFF - LDA (ESTKH-2,X) - DEX - STA ESTKL,X - STZ ESTKH,X - STA ALTRDON - JMP NEXTOP -LAWX INY ;+INC_IP - LDA (IP),Y - STA TMPL - INY ;+INC_IP - LDA (IP),Y - STA TMPH - STY IPY - STA ALTRDOFF - LDA (TMP) - DEX - STA ESTKL,X - LDY #$01 - LDA (TMP),Y - STA ESTKH,X - STA ALTRDON - LDY IPY - JMP NEXTOP -;* -;* STORE VALUE TO ADDRESS -;* -SB LDA ESTKL,X - STA ESTKH-1,X - LDA ESTKL+1,X - STA (ESTKH-1,X) - INX - JMP DROP -SW LDA ESTKL,X - STA ESTKH-1,X - LDA ESTKL+1,X - STA (ESTKH-1,X) - LDA ESTKH+1,X - INC ESTKH-1,X - BEQ + - STA (ESTKH-1,X) - INX - JMP DROP -+ INC ESTKH,X - STA (ESTKH-1,X) - INX - JMP DROP -;* -;* STORE VALUE TO LOCAL FRAME OFFSET -;* -SLB INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - LDA ESTKL,X - STA (IFP),Y - LDY IPY - BMI FIXDROP - JMP DROP -SLW INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - LDA ESTKL,X - STA (IFP),Y - INY - LDA ESTKH,X - STA (IFP),Y - LDY IPY - BMI FIXDROP - JMP DROP -FIXDROP TYA - LDY #$00 - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ JMP DROP -;* -;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK -;* -DLB INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - LDA ESTKL,X - STA (IFP),Y - LDY IPY - JMP NEXTOP -DLW INY ;+INC_IP - LDA (IP),Y - STY IPY - TAY - LDA ESTKL,X - STA (IFP),Y - INY - LDA ESTKH,X - STA (IFP),Y - LDY IPY - JMP NEXTOP -;* -;* STORE VALUE TO ABSOLUTE ADDRESS -;* -- TYA ; RENORMALIZE IP - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ LDY #$FF -SAB INY ;+INC_IP - BMI - - LDA (IP),Y - STA ESTKH-2,X - INY ;+INC_IP - LDA (IP),Y - STA ESTKH-1,X - LDA ESTKL,X - STA (ESTKH-2,X) - JMP DROP -SAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - INY ;+INC_IP - LDA (IP),Y - STA TMPH - STY IPY - LDA ESTKL,X - STA (TMP) - LDY #$01 - LDA ESTKH,X - STA (TMP),Y - LDY IPY - BMI FIXDROP - JMP DROP -;* -;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK -;* -DAB INY ;+INC_IP - LDA (IP),Y - STA ESTKH-2,X - INY ;+INC_IP - LDA (IP),Y - STA ESTKH-1,X - LDA ESTKL,X - STA (ESTKH-2,X) - JMP NEXTOP -DAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - INY ;+INC_IP - LDA (IP),Y - STA TMPH - STY IPY - LDA ESTKL,X - STA (TMP) - LDY #$01 - LDA ESTKH,X - STA (TMP),Y - LDY IPY - JMP NEXTOP -;* -;* COMPARES -;* -ISEQ LDA ESTKL,X - CMP ESTKL+1,X - BNE ISFLS - LDA ESTKH,X - CMP ESTKH+1,X - BNE ISFLS -ISTRU LDA #$FF - STA ESTKL+1,X - STA ESTKH+1,X - JMP DROP -; -ISNE LDA ESTKL,X - CMP ESTKL+1,X - BNE ISTRU - LDA ESTKH,X - CMP ESTKH+1,X - BNE ISTRU -ISFLS STZ ESTKL+1,X - STZ ESTKH+1,X - JMP DROP -; -ISGE LDA ESTKL+1,X - CMP ESTKL,X - LDA ESTKH+1,X - SBC ESTKH,X - BVS + - BPL ISTRU - BMI ISFLS -+ BPL ISFLS - BMI ISTRU -; -ISGT LDA ESTKL,X - CMP ESTKL+1,X - LDA ESTKH,X - SBC ESTKH+1,X - BVS + - BMI ISTRU - BPL ISFLS -+ BMI ISFLS - BPL ISTRU -; -ISLE LDA ESTKL,X - CMP ESTKL+1,X - LDA ESTKH,X - SBC ESTKH+1,X - BVS + - BPL ISTRU - BMI ISFLS -+ BPL ISFLS - BMI ISTRU -; -ISLT LDA ESTKL+1,X - CMP ESTKL,X - LDA ESTKH+1,X - SBC ESTKH,X - BVS + - BMI ISTRU - BPL ISFLS -+ BMI ISFLS - BPL ISTRU -;* -;* BRANCHES -;* -BRTRU INX - LDA ESTKH-1,X - ORA ESTKL-1,X - BNE BRNCH -NOBRNCH INY ;+INC_IP - INY - BMI FIXNEXT - JMP NEXTOP -FIXNEXT TYA - LDY #$00 - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ JMP NEXTOP -BRFLS INX - LDA ESTKH-1,X - ORA ESTKL-1,X - BNE NOBRNCH -BRNCH TYA ; FLATTEN IP - SEC - ADC IPL - STA TMPL - LDA #$00 - ADC IPH - STA TMPH ; ADD BRANCH OFFSET - LDA (TMP) - ;CLC ; BETTER NOT CARRY OUT OF IP+Y - ADC TMPL - STA IPL - LDY #$01 - LDA (TMP),Y - ADC TMPH - STA IPH - DEY - JMP FETCHOP -BREQ INX - LDA ESTKL-1,X - CMP ESTKL,X - BNE NOBRNCH - LDA ESTKH-1,X - CMP ESTKH,X - BEQ BRNCH - BNE NOBRNCH -BRNE INX - LDA ESTKL-1,X - CMP ESTKL,X - BNE BRNCH - LDA ESTKH-1,X - CMP ESTKH,X - BEQ NOBRNCH - BNE BRNCH -BRGT INX - LDA ESTKL-1,X - CMP ESTKL,X - LDA ESTKH-1,X - SBC ESTKH,X - BVS + - BPL NOBRNCH - BMI BRNCH -+ BPL BRNCH - BMI NOBRNCH -BRLT INX - LDA ESTKL,X - CMP ESTKL-1,X - LDA ESTKH,X - SBC ESTKH-1,X - BVS + - BPL NOBRNCH - BMI BRNCH -+ BPL BRNCH - BMI NOBRNCH -IBRNCH TYA ; FLATTEN IP - CLC - ADC IPL - STA TMPL - LDA #$00 - TAY - ADC IPH - STA TMPH ; ADD BRANCH OFFSET - LDA TMPL - ;CLC ; BETTER NOT CARRY OUT OF IP+Y - ADC ESTKL,X - STA IPL - LDA TMPH - ADC ESTKH,X - STA IPH - JMP DROP -;* -;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) -;* -CALL INY ;+INC_IP - LDA (IP),Y - STA TMPL - INY ;+INC_IP - LDA (IP),Y - STA TMPH - TYA - CLC - ADC IPL - PHA - LDA IPH - ADC #$00 - PHA - JSR JMPTMP - PLA - STA IPH - PLA - STA IPL - LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - LDY #$01 - JMP FETCHOP -; -CALLX INY ;+INC_IP - LDA (IP),Y - STA TMPL - INY ;+INC_IP - LDA (IP),Y - STA TMPH - TYA - CLC - ADC IPL - PHA - LDA IPH - ADC #$00 - PHA - STA ALTRDOFF - LDA PSR - PHA - PLP - JSR JMPTMP - PHP - PLA - STA PSR - SEI - STA ALTRDON - PLA - STA IPH - PLA - STA IPL - LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - LDY #$01 - JMP FETCHOP -;* -;* INDIRECT CALL TO ADDRESS (NATIVE CODE) -;* -ICAL LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - INX - TYA - CLC - ADC IPL - PHA - LDA IPH - ADC #$00 - PHA - JSR JMPTMP - PLA - STA IPH - PLA - STA IPL - LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - LDY #$01 - JMP FETCHOP -; -ICALX LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - INX - TYA - CLC - ADC IPL - PHA - LDA IPH - ADC #$00 - PHA - STA ALTRDOFF - LDA PSR - PHA - PLP - JSR JMPTMP - PHP - PLA - STA PSR - STA ALTRDON - PLA - STA IPH - PLA - STA IPL - LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - LDY #$01 - JMP FETCHOP -;* -;* JUMP INDIRECT TRHOUGH TMP -;* -;JMPTMP JMP (TMP) -;* -;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT -;* -ENTER LDA IFPH - PHA ; SAVE ON STACK FOR LEAVE - LDA IFPL - PHA - INY - LDA (IP),Y - EOR #$FF ; ALLOCATE FRAME - SEC - ADC PPL - STA PPL - STA IFPL - LDA #$FF - ADC PPH - STA PPH - STA IFPH - INY - LDA (IP),Y - BEQ + - ASL - TAY -- LDA ESTKH,X - DEY - STA (IFP),Y - LDA ESTKL,X - INX - DEY - STA (IFP),Y - BNE - -+ LDY #$03 - JMP FETCHOP -;* -;* LEAVE FUNCTION -;* -LEAVEX INY ;+INC_IP - LDA (IP),Y - CLC - ADC IFPL - STA PPL - LDA #$00 - ADC IFPH - STA PPH - PLA ; RESTORE PREVIOUS FRAME - STA IFPL - PLA - STA IFPH -RETX STA ALTRDOFF - LDA PSR - PHA - PLP - RTS -LEAVE INY ;+INC_IP - LDA (IP),Y - CLC - ADC IFPL - STA PPL - LDA #$00 - ADC IFPH - STA PPH - PLA ; RESTORE PREVIOUS FRAME - STA IFPL - PLA - STA IFPH -RET RTS -VMEND = * -} From a58886b19fce8438ff1fdca6ba296226fa6e46e4 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 31 Jan 2018 15:03:18 -0800 Subject: [PATCH 04/40] Add editor readme --- doc/Editor.md | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/mkrel | 1 + 2 files changed, 109 insertions(+) create mode 100644 doc/Editor.md diff --git a/doc/Editor.md b/doc/Editor.md new file mode 100644 index 0000000..16d1994 --- /dev/null +++ b/doc/Editor.md @@ -0,0 +1,108 @@ + WELCOME TO PLASMA! + ================== + +FIRST THINGS FIRST: +TO NAVIGATE, USE THE ARROW KEYS. ON THE +APPLE ][: + + CTRL-K = UP + CTRL-J = DOWN. + +TO JUMP AROUND THE TEXT FILE USE: + + CTRL-W = JUMP UP + CTRL-Z = JUMP DOWN + CTRL-A = JUMP LEFT + CTRL-S = JUMP RIGHT + + CTRL-Q = JUMP BEGINNING + CTRL-E = JUMP END + +THE 'ESCAPE' KEY WILL PUT YOU IN COMMAND +MODE. FROM THERE YOU CAN EXIT BY +ENTERING 'Q' AND 'RETURN'. YOU CAN ALSO +RETURN TO THE EDITOR BY JUST PRESSING +'RETURN'. + +------- + +THE PLASMA EDITOR IS A SIMPLE TEXT +EDITOR FOR ENTERING AND MANIPULATING +TEXT AND SOURCE CODE FILES. THE EDITOR +ONLY SUPPORTS 40 COLUMN TEXT ALTHOUGH +LINES CAN BE UP TO 79 CHARACTERS LONG. +THE SCREEN WILL SCROLL HORIZONTALLY +AS THE CURSOR MOVES. THERE IS 16K OF +MEMORY FOR THE TEXT BUFFER. + +IT HAS TWO MODES, COMMAND AND EDIT. + + EDIT COMMANDS: + + LEFT ARROW = MOVE CHAR LEFT + RIGHT ARROW = MOVE CHAR RIGHT + UP ARROW = MOVE LINE UP + DOWN ARROW = MOVE LINE DOWN + CTRL-K = MOVE LINE UP + CTRL-J = MOVE LINE DOWN + CTRL-A = JUMP LEFT + CTRL-S = JUMP RIGHT + CTRL-W = JUMP UP + CTRL-Z = JUMP DOWN + CTRL-Q = JUMP BEGIN + CTRL-E = JUMP END + CTRL-D = DELETE CHAR + CTRL-X = DELETE LINE + CTRL-V = COPY DELETED LINE + CTRL-O = OPEN NEW LINE + CTRL-F = OPEN A FOLLOWING NEW LINE + CTRL-T = JOIN LINES + CTRL-I = TOGGLE INSERT/OVERWRITE + ESCAPE = SWITCH TO COMMAND MODE + + APPLE ][ FEATURES: + + SHIFT-M = ] + CTRL-N = [ + CTRL-P = _ + CTRL-B = | + CTRL-Y = ~ + CTRL-L = SHIFT LOCK + SHIFT-LEFT ARROW = DELETE (SHIFT-MOD) + + WITH THE SHIFT-KEY MOD ON AN + APPLE ][, UPPER AND LOWER CASE + ENTRY WORKS AS EXPECTED. + + CTRL-C = FORCE LOWER-CASE CHARS + + IF YOU HAVE A LOWER-CASE CHARACTER + GENERATOR INSTALLED, YOU CAN FORCE + LOWER-CASE DISPLAY. OTHERWISE, + UPPER CASE WILL BE DISPLAYED NORMALLY + BUT lower-case will be displayed in + inverse. This is the default. + + Apple //e AND //c FEATURES: + + THE 'CLOSED-APPLE' KEY WILL MODIFY + THE ARROW KEYS INTO THEIR JUMP + EQUIVALENTS. IT WILL ALSO MODIFY + THE 'RETURN' KEY TO OPEN UP A LINE, + JUST LIKE CTRL-F. + + COMMAND MODE: + + + [OPTIONAL PARAMETER] + + Q = QUIT + R = READ FILE + W [FILENAME] = WRITE FILE (OPTIONAL FILENAME) + A [FILENAME] = APPEND FILE + C [PREFIX] = CATALOG FILES + P = SET PREFIX + H [SLOT] = HARDCOPY TO DEVICE IN SLOT (DEFAULT 1) + N = CLEAR TEXT IN MEMORY + E = EDIT MODE + 'RETURN' = EDIT MODE diff --git a/src/mkrel b/src/mkrel index cc25938..a4064f4 100755 --- a/src/mkrel +++ b/src/mkrel @@ -1,6 +1,7 @@ cp CMD#061000 prodos/CMD.BIN cp PLASMA.SYSTEM#FF2000 prodos/PLASMA.SYSTEM.SYS cp PLASMA16.SYSTEM#FF2000 prodos/PLASMA16.SYSTEM.SYS +cp ../doc/Editor.md prodos/EDITOR.README.TXT rm -rf prodos/sys mkdir prodos/sys From b85e85e18b9723caa09ef5db469ba363a8a7a774 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 31 Jan 2018 15:14:09 -0800 Subject: [PATCH 05/40] Update Editor.md --- doc/Editor.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Editor.md b/doc/Editor.md index 16d1994..d59e90b 100644 --- a/doc/Editor.md +++ b/doc/Editor.md @@ -1,5 +1,5 @@ - WELCOME TO PLASMA! - ================== + WELCOME TO THE PLASMA EDITOR! + ============================= FIRST THINGS FIRST: TO NAVIGATE, USE THE ARROW KEYS. ON THE From ca324692533e2ea6774dba6a5f7e65ae1225a6a8 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 31 Jan 2018 15:15:24 -0800 Subject: [PATCH 06/40] Update Editor.md --- doc/Editor.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/doc/Editor.md b/doc/Editor.md index d59e90b..3f6b2a8 100644 --- a/doc/Editor.md +++ b/doc/Editor.md @@ -5,18 +5,18 @@ FIRST THINGS FIRST: TO NAVIGATE, USE THE ARROW KEYS. ON THE APPLE ][: - CTRL-K = UP - CTRL-J = DOWN. + CTRL-K = UP + CTRL-J = DOWN. TO JUMP AROUND THE TEXT FILE USE: - CTRL-W = JUMP UP - CTRL-Z = JUMP DOWN - CTRL-A = JUMP LEFT - CTRL-S = JUMP RIGHT + CTRL-W = JUMP UP + CTRL-Z = JUMP DOWN + CTRL-A = JUMP LEFT + CTRL-S = JUMP RIGHT - CTRL-Q = JUMP BEGINNING - CTRL-E = JUMP END + CTRL-Q = JUMP BEGINNING + CTRL-E = JUMP END THE 'ESCAPE' KEY WILL PUT YOU IN COMMAND MODE. FROM THERE YOU CAN EXIT BY @@ -70,26 +70,26 @@ IT HAS TWO MODES, COMMAND AND EDIT. CTRL-L = SHIFT LOCK SHIFT-LEFT ARROW = DELETE (SHIFT-MOD) - WITH THE SHIFT-KEY MOD ON AN - APPLE ][, UPPER AND LOWER CASE - ENTRY WORKS AS EXPECTED. + WITH THE SHIFT-KEY MOD ON AN + APPLE ][, UPPER AND LOWER CASE + ENTRY WORKS AS EXPECTED. CTRL-C = FORCE LOWER-CASE CHARS - IF YOU HAVE A LOWER-CASE CHARACTER - GENERATOR INSTALLED, YOU CAN FORCE - LOWER-CASE DISPLAY. OTHERWISE, - UPPER CASE WILL BE DISPLAYED NORMALLY - BUT lower-case will be displayed in - inverse. This is the default. + IF YOU HAVE A LOWER-CASE CHARACTER + GENERATOR INSTALLED, YOU CAN FORCE + LOWER-CASE DISPLAY. OTHERWISE, + UPPER CASE WILL BE DISPLAYED NORMALLY + BUT lower-case will be displayed in + inverse. This is the default. Apple //e AND //c FEATURES: - THE 'CLOSED-APPLE' KEY WILL MODIFY - THE ARROW KEYS INTO THEIR JUMP - EQUIVALENTS. IT WILL ALSO MODIFY - THE 'RETURN' KEY TO OPEN UP A LINE, - JUST LIKE CTRL-F. + THE 'CLOSED-APPLE' KEY WILL MODIFY + THE ARROW KEYS INTO THEIR JUMP + EQUIVALENTS. IT WILL ALSO MODIFY + THE 'RETURN' KEY TO OPEN UP A LINE, + JUST LIKE CTRL-F. COMMAND MODE: From 5499614c16ba5a972b0f586e212b2957e7cea7c6 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 31 Jan 2018 15:16:57 -0800 Subject: [PATCH 07/40] Update Editor.md --- doc/Editor.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Editor.md b/doc/Editor.md index 3f6b2a8..e88d26b 100644 --- a/doc/Editor.md +++ b/doc/Editor.md @@ -1,5 +1,5 @@ - WELCOME TO THE PLASMA EDITOR! - ============================= +WELCOME TO THE PLASMA EDITOR! +============================= FIRST THINGS FIRST: TO NAVIGATE, USE THE ARROW KEYS. ON THE From b2ddeb090b49f4a13ec47ee048e967f16b95d2f1 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 31 Jan 2018 15:46:50 -0800 Subject: [PATCH 08/40] PLASM Patch #1 - export def bugfix --- PLASMA-BLD1.PO | Bin 143360 -> 143360 bytes src/toolsrc/parse.pla | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/PLASMA-BLD1.PO b/PLASMA-BLD1.PO index d504cbf922818e31e99ad8e4e5f9c738406179d3..2adf3682e82ca8e4cc6ce5d96b8815453f1b5172 100644 GIT binary patch delta 1345 zcmW;JX-HI27{>8)$C(-%Q)yZ)oyq}mvfZqvy!V!3*+@-{C~a0yW(5Pb*!E#O(MCaa z6WYkc%8C{%CPySmDvBuDOCeh?cv%u*_jg~3a!EO9WTvF zTiNb#yiygc4i7aco64U3dCeyp{^l!@ZP~(90{|&X+sS9 zVgyD*Ll&|z13u(o77DNsg;)wdR$()?VF!$K-hUsV0#!JJbErW*8gLCaa0_?Ph-YX; z8$RP3Y^pGZsb*uO8gHbk3399|q#G)x!3!UE^3`6(Qt}F{ReApnlm}I_ET^c%F;wFs zYHi`VRO5Yx$75}hl+ zG7_njV>wjGlgOFmsbmkPV>Sw~2+QC{G1hQba(6R%8+NhZqdDYW@*(n3@=5Y(RO13& zNQ;(r%zE~L29|5Mfm@UhIDE`((gw@tbS>mo&0&N!v;50m(S>2rErwN(kT!C(?vQq7 zf961DA~Q)BawtY%G+mnRFub~1`p9{@*_fqA7{%;Y>7tvlhGIR%>Dt!5NwoN_$Q G)cYU)ho|NM delta 1369 zcmXxhYivwu9LMqJOwZ`F-7wm!w%K+XbxFrmi-dNx=NzSqPBJdzvMga&kxA-)dBe^; zOGsREltv>i6>%5L=#niJc0=5$7e&xgB5mAD%kJ9ojl_%3^Z)&S&y$=NC)i{QHrY;$ zwc2k^6?r|o#@j@*_!h!5t-Jq-J7QSMgeXmzE@H!RXN@c+FYI~VVpmR93~C>mKVNZH zYBu3}JYvi&#korxEM^OrT}|}Zgll-vSC`-tmSw{CA`>1!HT9YPxbVmo%= z5JIR6a9lw>9^)xm@doeFf&UPJtw6{mq#y&C=!0AoK*un6;KgK2#jjX_O{hW*{>Ehl zu5;W$1Dfy*FYpQ<@d;|7kkN=kB3#J95EP*prSM`LCSVGt;TM#_j|GrejkVZV$p5b( z>_9aR;s{RS3~F&67jX$!P>*|PLn5*~Z{sc+@QD5ieJlAb+R%Y0U6`Hp zbQz-y`2!M=M3$XTf*F_%KgzL~w<~!o z$*ZxReUt8xTgcnVyUF{=2XGk2=t6pDS;IWT9;oFwkBhiOd4tQ_%)5FId7thfxlwnR z9l9$2VgJIe7* BYTE_TKN and token <> WORD_TKN // This could be an exported definition - rewind(tknptr) + rewind(idptr) scan return FALSE fin From 29eca26e55bcecbb19f76ab9665cc270b40c9cd2 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 31 Jan 2018 15:51:03 -0800 Subject: [PATCH 09/40] Capture Peter's 65C02 optimizations in VM --- PLASMA-PRE3.PO | Bin 143360 -> 143360 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PLASMA-PRE3.PO b/PLASMA-PRE3.PO index e5cb0c318cce6bd26defea7d47b049eb0c91247b..04a0bd3729d9b43cfcc64a911ccc7e780c9cdd98 100644 GIT binary patch delta 4507 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 OJ-Bj1_oqF$Fy?O#3}K}J From 23cb41e1083d48197500363540924cb04387a017 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 1 Feb 2018 06:54:06 -0800 Subject: [PATCH 10/40] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e95a88f..c20c7c9 100755 --- a/README.md +++ b/README.md @@ -189,6 +189,8 @@ and just like with the cross-compiled module, you will get the `Hello, word.` me # Tutorial +I've created a YouTube playlist of PLASMA tutorial videos. Best viewed when you follow along on a live Apple II or emulator. They are brief segments to highlight one feature of PLASMA at a time: [Modern Retrogramming with PLASMA](https://www.youtube.com/playlist?list=PLlPKgUMQbJ79VJvZRfv1CJQf4SP2Gw3yU) + During KansasFest 2015, I gave a PLASMA introduction using the Apple II PLASMA sandbox IDE. You can play along using your favorite Apple II emulator, or one that runs directly in your browser: [Apple II Emulator in Javascript](https://www.scullinsteel.com/apple/e). Download [SANDBOX.PO](https://github.com/dschmenk/PLASMA/blob/master/SANDBOX.PO?raw=true) and load it into Drive 1 of the emulator. Start the [KansasFest PLASMA Code-along video](https://www.youtube.com/watch?v=RrR79WVHwJo?t=11m24s) and follow along. To use this tutorial, make sure you have a working PLASMA installation as described in the previous section. From b177c3f69d551c68d594d2b7c976d5596fb64e9c Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 1 Feb 2018 12:52:00 -0800 Subject: [PATCH 11/40] Synchronize VMs --- src/vmsrc/plvm01.s | 425 ++++++++++++++++++++------------------------ src/vmsrc/plvm02.s | 46 +++-- src/vmsrc/plvm03.s | 431 +++++++++++++++++++-------------------------- 3 files changed, 394 insertions(+), 508 deletions(-) diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index 9023221..0ca40ec 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -5,7 +5,6 @@ ;* SYSTEM ROUTINES AND LOCATIONS ;* ;********************************************************** -SELFMODIFY = 1 ;* ;* VM ZERO PAGE LOCATIONS ;* @@ -20,18 +19,6 @@ IPH = IPL+1 OPIDX = FETCHOP+6 OPPAGE = OPIDX+1 ;* -;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO -;* - !MACRO INC_IP { - INY - BPL + - INC IPH - TYA - AND #$7F - TAY -+ - } -;* ;* INTERPRETER HEADER+INITIALIZATION ;* *= $0280 @@ -92,21 +79,21 @@ MULLP LSR TMPH ; MULTPLRH BNE MULLP STA ESTKH+1,X ; PRODH LDY IPY - JMP DROP + JMP DROP ;* ;* INCREMENT TOS ;* INCR INC ESTKL,X - BNE INCR1 + BNE + INC ESTKH,X -INCR1 JMP NEXTOP ++ JMP NEXTOP ;* ;* DECREMENT TOS ;* DECR LDA ESTKL,X - BNE DECR1 + BNE + DEC ESTKH,X -DECR1 DEC ESTKL,X ++ DEC ESTKL,X JMP NEXTOP ;* ;* BITWISE COMPLIMENT TOS @@ -121,7 +108,7 @@ COMP LDA #$FF ;* ;* OPCODE TABLE ;* - !ALIGN 255,0 + !ALIGN 255,0 OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E @@ -154,10 +141,9 @@ MOD JSR _DIV DIVMOD JSR _DIV LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCC + - INX JSR _NEG - DEX -+ LDA TMPL ; REMNDRL ++ DEX + LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH STA ESTKH,X @@ -292,24 +278,24 @@ XOR LDA ESTKL+1,X ;* ;* SHIFT TOS-1 LEFT BY TOS ;* -SHL STY IPY +SHL STY IPY LDA ESTKL,X CMP #$08 - BCC SHL1 + BCC + LDY ESTKL+1,X STY ESTKH+1,X LDY #$00 STY ESTKL+1,X SBC #$08 -SHL1 TAY - BEQ SHL3 ++ TAY + BEQ + LDA ESTKL+1,X -SHL2 ASL +- ASL ROL ESTKH+1,X DEY - BNE SHL2 + BNE - STA ESTKL+1,X -SHL3 LDY IPY ++ LDY IPY JMP DROP ;* ;* SHIFT TOS-1 RIGHT BY TOS @@ -317,51 +303,40 @@ SHL3 LDY IPY SHR STY IPY LDA ESTKL,X CMP #$08 - BCC SHR2 + BCC ++ LDY ESTKH+1,X STY ESTKL+1,X CPY #$80 LDY #$00 - BCC SHR1 + BCC + DEY -SHR1 STY ESTKH+1,X ++ STY ESTKH+1,X SEC SBC #$08 -SHR2 TAY - BEQ SHR4 +++ TAY + BEQ + LDA ESTKH+1,X -SHR3 CMP #$80 +- CMP #$80 ROR ROR ESTKL+1,X DEY - BNE SHR3 + BNE - STA ESTKH+1,X -SHR4 LDY IPY ++ LDY IPY JMP DROP ;* -;* LOGICAL NOT -;* -LNOT LDA ESTKL,X - ORA ESTKH,X - BEQ LNOT1 - LDA #$FF -LNOT1 EOR #$FF - STA ESTKL,X - STA ESTKH,X - JMP NEXTOP -;* ;* LOGICAL AND ;* LAND LDA ESTKL+1,X ORA ESTKH+1,X - BEQ LAND2 + BEQ ++ LDA ESTKL,X ORA ESTKH,X - BEQ LAND1 + BEQ + LDA #$FF -LAND1 STA ESTKL+1,X ++ STA ESTKL+1,X STA ESTKH+1,X -LAND2 JMP DROP +++ JMP DROP ;* ;* LOGICAL OR ;* @@ -369,11 +344,11 @@ LOR LDA ESTKL,X ORA ESTKH,X ORA ESTKL+1,X ORA ESTKH+1,X - BEQ LOR1 + BEQ + LDA #$FF STA ESTKL+1,X STA ESTKH+1,X -LOR1 JMP DROP ++ JMP DROP ;* ;* DUPLICATE TOS ;* @@ -384,10 +359,20 @@ DUP DEX STA ESTKH,X JMP NEXTOP ;* +;* LOGICAL NOT +;* +LNOT LDA ESTKL,X + ORA ESTKH,X + BNE + + LDA #$FF + STA ESTKL,X + STA ESTKH,X + JMP NEXTOP +;* ;* CONSTANT ;* ZERO DEX - LDA #$00 ++ LDA #$00 STA ESTKL,X STA ESTKH,X JMP NEXTOP @@ -396,19 +381,34 @@ CFFB LDA #$FF CB LDA #$00 DEX STA ESTKH,X - +INC_IP + INY ;+INC_IP LDA (IP),Y STA ESTKL,X JMP NEXTOP ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) ;* -LA = * -CW DEX - INY ;+INC_IP +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +LA INY ;+INC_IP + BMI - + DEX LDA (IP),Y STA ESTKL,X - +INC_IP + INY + LDA (IP),Y + STA ESTKH,X + JMP NEXTOP +CW DEX + INY ;+INC_IP + LDA (IP),Y + STA ESTKL,X + INY LDA (IP),Y STA ESTKH,X JMP NEXTOP @@ -416,9 +416,9 @@ CW DEX ;* CONSTANT STRING ;* CS DEX - INY ;+INC_IP - TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK - CLC + ;INY ;+INC_IP + TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK + SEC ADC IPL STA IPL STA ESTKL,X @@ -433,46 +433,38 @@ CS DEX ;* ;* LOAD VALUE FROM ADDRESS TAG ;* -!IF SELFMODIFY { LB LDA ESTKL,X - STA LBLDA+1 - LDA ESTKH,X - STA LBLDA+2 -LBLDA LDA $FFFF + STA ESTKH-1,X + LDA (ESTKH-1,X) STA ESTKL,X LDA #$00 STA ESTKH,X JMP NEXTOP -} ELSE { -LB LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - STY IPY - LDY #$00 - LDA (TMP),Y - STA ESTKL,X - STY ESTKH,X - LDY IPY - JMP NEXTOP -} LW LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - STY IPY - LDY #$00 - LDA (TMP),Y + STA ESTKH-1,X + LDA (ESTKH-1,X) STA ESTKL,X - INY - LDA (TMP),Y + INC ESTKH-1,X + BEQ + + LDA (ESTKH-1,X) + STA ESTKH,X + JMP NEXTOP ++ INC ESTKH,X + LDA (ESTKH-1,X) STA ESTKH,X - LDY IPY JMP NEXTOP ;* ;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* -LLA +INC_IP +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +LLA INY ;+INC_IP + BMI - LDA (IP),Y DEX CLC @@ -485,7 +477,7 @@ LLA +INC_IP ;* ;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* -LLB +INC_IP +LLB INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -496,7 +488,7 @@ LLB +INC_IP STA ESTKH,X LDY IPY JMP NEXTOP -LLW +INC_IP +LLW INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -511,39 +503,22 @@ LLW +INC_IP ;* ;* LOAD VALUE FROM ABSOLUTE ADDRESS ;* -!IF SELFMODIFY { -LAB INY ;+INC_IP +LAB INY ;+INC_IP LDA (IP),Y - STA LABLDA+1 - +INC_IP + STA ESTKH-2,X + INY ;+INC_IP LDA (IP),Y - STA LABLDA+2 -LABLDA LDA $FFFF + STA ESTKH-1,X + LDA (ESTKH-2,X) DEX STA ESTKL,X LDA #$00 STA ESTKH,X JMP NEXTOP -} ELSE { -LAB INY ;+INC_IP +LAW INY ;+INC_IP LDA (IP),Y STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - STY IPY - LDY #$00 - LDA (TMP),Y - DEX - STA ESTKL,X - STY ESTKH,X - LDY IPY - JMP NEXTOP -} -LAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - +INC_IP + INY ;+INC_IP LDA (IP),Y STA TMPH STY IPY @@ -559,54 +534,39 @@ LAW INY ;+INC_IP ;* ;* STORE VALUE TO ADDRESS ;* -!IF SELFMODIFY { SB LDA ESTKL,X - STA SBSTA+1 - LDA ESTKH,X - STA SBSTA+2 + STA ESTKH-1,X LDA ESTKL+1,X -SBSTA STA $FFFF + STA (ESTKH-1,X) INX JMP DROP -} ELSE { -SB LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - LDA ESTKL+1,X - STY IPY - LDY #$00 - STA (TMP),Y - LDY IPY - INX - JMP DROP -} SW LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - STY IPY - LDY #$00 + STA ESTKH-1,X LDA ESTKL+1,X - STA (TMP),Y - INY + STA (ESTKH-1,X) LDA ESTKH+1,X - STA (TMP),Y - LDY IPY + INC ESTKH-1,X + BEQ + + STA (ESTKH-1,X) + INX + JMP DROP ++ INC ESTKH,X + STA (ESTKH-1,X) INX JMP DROP ;* ;* STORE VALUE TO LOCAL FRAME OFFSET ;* -SLB +INC_IP +SLB INY ;+INC_IP LDA (IP),Y STY IPY TAY LDA ESTKL,X STA (IFP),Y LDY IPY + BMI FIXDROP JMP DROP -SLW +INC_IP +SLW INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -616,11 +576,20 @@ SLW +INC_IP LDA ESTKH,X STA (IFP),Y LDY IPY + BMI FIXDROP JMP DROP +FIXDROP TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP DROP ;* ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* -DLB +INC_IP +DLB INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -628,7 +597,7 @@ DLB +INC_IP STA (IFP),Y LDY IPY JMP NEXTOP -DLW +INC_IP +DLW INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -642,34 +611,27 @@ DLW +INC_IP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS ;* -!IF SELFMODIFY { -SAB INY ;+INC_IP +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +SAB INY ;+INC_IP + BMI - LDA (IP),Y - STA SABSTA+1 - +INC_IP + STA ESTKH-2,X + INY ;+INC_IP LDA (IP),Y - STA SABSTA+2 + STA ESTKH-1,X LDA ESTKL,X -SABSTA STA $FFFF + STA (ESTKH-2,X) JMP DROP -} ELSE { -SAB INY ;+INC_IP +SAW INY ;+INC_IP LDA (IP),Y STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - LDA ESTKL,X - STY IPY - LDY #$00 - STA (TMP),Y - LDY IPY - JMP DROP -} -SAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - +INC_IP + INY ;+INC_IP LDA (IP),Y STA TMPH STY IPY @@ -680,38 +642,24 @@ SAW INY ;+INC_IP LDA ESTKH,X STA (TMP),Y LDY IPY + BMI FIXDROP JMP DROP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* -!IF SELFMODIFY { -DAB INY ;+INC_IP +DAB INY ;+INC_IP LDA (IP),Y - STA DABSTA+1 - +INC_IP + STA ESTKH-2,X + INY ;+INC_IP LDA (IP),Y - STA DABSTA+2 + STA ESTKH-1,X LDA ESTKL,X -DABSTA STA $FFFF + STA (ESTKH-2,X) JMP NEXTOP -} ELSE { -DAB INY ;+INC_IP +DAW INY ;+INC_IP LDA (IP),Y STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - STY IPY - LDY #$00 - LDA ESTKL,X - STA (TMP),Y - LDY IPY - JMP NEXTOP -} -DAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - +INC_IP + INY ;+INC_IP LDA (IP),Y STA TMPH STY IPY @@ -752,37 +700,41 @@ ISGE LDA ESTKL+1,X CMP ESTKL,X LDA ESTKH+1,X SBC ESTKH,X - BVC ISGE1 - EOR #$80 -ISGE1 BPL ISTRU + BVS + + BPL ISTRU BMI ISFLS ++ BPL ISFLS + BMI ISTRU ; ISGT LDA ESTKL,X CMP ESTKL+1,X LDA ESTKH,X SBC ESTKH+1,X - BVC ISGT1 - EOR #$80 -ISGT1 BMI ISTRU + BVS + + BMI ISTRU BPL ISFLS ++ BMI ISFLS + BPL ISTRU ; ISLE LDA ESTKL,X CMP ESTKL+1,X LDA ESTKH,X SBC ESTKH+1,X - BVC ISLE1 - EOR #$80 -ISLE1 BPL ISTRU + BVS + + BPL ISTRU BMI ISFLS ++ BPL ISFLS + BMI ISTRU ; ISLT LDA ESTKL+1,X CMP ESTKL,X LDA ESTKH+1,X SBC ESTKH,X - BVC ISLT1 - EOR #$80 -ISLT1 BMI ISTRU + BVS + + BMI ISTRU BPL ISFLS ++ BMI ISFLS + BPL ISTRU ;* ;* BRANCHES ;* @@ -790,9 +742,18 @@ BRTRU INX LDA ESTKH-1,X ORA ESTKL-1,X BNE BRNCH -NOBRNCH INY ;+INC_IP - +INC_IP +NOBRNCH INY ;+INC_IP + INY ;+INC_IP + BMI FIXNEXT JMP NEXTOP +FIXNEXT TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP NEXTOP BRFLS INX LDA ESTKH-1,X ORA ESTKL-1,X @@ -836,20 +797,34 @@ BRGT INX CMP ESTKL,X LDA ESTKH-1,X SBC ESTKH,X + BVS + BPL NOBRNCH BMI BRNCH ++ BPL BRNCH + BMI NOBRNCH BRLT INX LDA ESTKL,X CMP ESTKL-1,X LDA ESTKH,X SBC ESTKH-1,X + BVS + BPL NOBRNCH BMI BRNCH -IBRNCH LDA IPL ++ BPL BRNCH + BMI NOBRNCH +IBRNCH TYA ; FLATTEN IP CLC + ADC IPL + STA TMPL + LDA #$00 + TAY + ADC IPH + STA TMPH ; ADD BRANCH OFFSET + LDA TMPL + ;CLC ; BETTER NOT CARRY OUT OF IP+Y ADC ESTKL,X STA IPL - LDA IPH + LDA TMPH ADC ESTKH,X STA IPH JMP DROP @@ -857,36 +832,20 @@ IBRNCH LDA IPL ;* INDIRECT CALL TO ADDRESS (NATIVE CODE) ;* ICAL LDA ESTKL,X -!IF SELFMODIFY { - STA CALLADR+1 -} ELSE { STA TMPL -} LDA ESTKH,X -!IF SELFMODIFY { - STA CALLADR+2 -} ELSE { STA TMPH -} INX BNE _CALL ;* ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* -CALL INY ;+INC_IP +CALL INY ;+INC_IP LDA (IP),Y -!IF SELFMODIFY { - STA CALLADR+1 -} ELSE { STA TMPL -} - INY ;+INC_IP + INY ;+INC_IP LDA (IP),Y -!IF SELFMODIFY { - STA CALLADR+2 -} ELSE { STA TMPH -} _CALL TYA CLC ADC IPL @@ -894,11 +853,7 @@ _CALL TYA LDA IPH ADC #$00 PHA -!IF SELFMODIFY { -CALLADR JSR $FFFF -} ELSE { JSR JMPTMP -} PLA STA IPH PLA @@ -938,14 +893,14 @@ ENTER INY ;* ;* LEAVE FUNCTION ;* -LEAVE INY ;+INC_IP +LEAVE INY ;+INC_IP LDA (IP),Y CLC ADC IFPL STA IFPL - BCS LIFPH + BCS + RTS -LIFPH INC IFPH ++ INC IFPH RET RTS A1CMD !SOURCE "vmsrc/a1cmd.a" SEGEND = * @@ -954,6 +909,8 @@ VMINIT LDY #$10 ; INSTALL PAGE 0 FETCHOP ROUTINE STA DROP-1,Y DEY BNE - + LDA #$4C ; SET JMPTMP OPCODE + STA JMPTMP STY IFPL ; INIT FRAME POINTER LDA #$80 STA IFPH @@ -962,7 +919,7 @@ VMINIT LDY #$10 ; INSTALL PAGE 0 FETCHOP ROUTINE LDA #>SEGEND STA SRCH LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX - JMP A1CMD + JMP A1CMD PAGE0 = * !PSEUDOPC DROP { ;* diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index cf6c6e9..0c8d46f 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -509,7 +509,8 @@ _DIVLP ROL TMPL ; REMNDRL ROL ESTKH+1,X ; DVDNDH DEY BNE _DIVLP -_DIVEX LDY IPY +_DIVEX INX + LDY IPY RTS ;* ;* NEGATE TOS @@ -526,7 +527,6 @@ NEG LDA #$00 ;* DIV TOS-1 BY TOS ;* DIV JSR _DIV - INX LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCS NEG JMP NEXTOP @@ -534,7 +534,6 @@ DIV JSR _DIV ;* MOD TOS-1 BY TOS ;* MOD JSR _DIV - INX LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH @@ -548,10 +547,9 @@ MOD JSR _DIV DIVMOD JSR _DIV LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCC + - INX JSR _NEG - DEX -+ LDA TMPL ; REMNDRL ++ DEX + LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH STA ESTKH,X @@ -562,18 +560,18 @@ DIVMOD JSR _DIV ;* INCREMENT TOS ;* INCR INC ESTKL,X - BEQ INCR1 + BEQ + JMP NEXTOP -INCR1 INC ESTKH,X ++ INC ESTKH,X JMP NEXTOP ;* ;* DECREMENT TOS ;* DECR LDA ESTKL,X - BEQ DECR1 + BEQ + DEC ESTKL,X JMP NEXTOP -DECR1 DEC ESTKL,X ++ DEC ESTKL,X DEC ESTKH,X JMP NEXTOP ;* @@ -670,14 +668,14 @@ SHR STY IPY ;* LAND LDA ESTKL+1,X ORA ESTKH+1,X - BEQ LAND2 + BEQ ++ LDA ESTKL,X ORA ESTKH,X - BEQ LAND1 + BEQ + LDA #$FF -LAND1 STA ESTKL+1,X ++ STA ESTKL+1,X STA ESTKH+1,X -LAND2 JMP DROP +++ JMP DROP ;* ;* LOGICAL OR ;* @@ -685,11 +683,11 @@ LOR LDA ESTKL,X ORA ESTKH,X ORA ESTKL+1,X ORA ESTKH+1,X - BEQ LOR1 + BEQ + LDA #$FF STA ESTKL+1,X STA ESTKH+1,X -LOR1 JMP DROP ++ JMP DROP ;* ;* DUPLICATE TOS ;* @@ -720,14 +718,14 @@ ZERO DEX CFFB DEX LDA #$FF STA ESTKH,X - INY + INY ;+INC_IP LDA (IP),Y STA ESTKL,X JMP NEXTOP CB DEX LDA #$00 STA ESTKH,X - INY + INY ;+INC_IP LDA (IP),Y STA ESTKL,X JMP NEXTOP @@ -762,9 +760,9 @@ CW DEX ;* CONSTANT STRING ;* CS DEX - INY ;+INC_IP + ;INY ;+INC_IP TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK - CLC + SEC ADC IPL STA IPL STA ESTKL,X @@ -778,9 +776,9 @@ CS DEX JMP NEXTOP ; CSX DEX - INY ;+INC_IP + ;INY ;+INC_IP TYA ; NORMALIZE IP - CLC + SEC ADC IPL STA IPL LDA #$00 @@ -1565,9 +1563,9 @@ CCBEND LDY #(CCSEND-CCS) JSR OPCPY CCS DEX - INY ;+INC_IP + ;INY ;+INC_IP TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK - CLC + SEC ADC IPL STA IPL STA ESTKL,X diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index ba7650f..8e7ca9a 100755 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -5,7 +5,6 @@ ;* SYSTEM ROUTINES AND LOCATIONS ;* ;********************************************************** -SELFMODIFY = 1 ; ; HARDWARE REGISTERS ; @@ -40,21 +39,9 @@ DSTX = XPAGE+DSTH !WORD .LIST } ;* -;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO -;* - !MACRO INC_IP { - INY - BPL + - INC IPH - TYA - AND #$7F - TAY -+ - } -;* ;* INTERPRETER HEADER+INITIALIZATION ;* - SEGSTART = $A000 +SEGSTART = $A000 *= SEGSTART-$0E !TEXT "SOS NTRP" !WORD $0000 @@ -131,16 +118,6 @@ INTERP PLA PLA ADC #$00 STA IPH - - LDA IFPH - PHA ; SAVE ON STACK FOR LEAVE/RET - LDA IFPL - PHA ; SAVE ON STACK FOR LEAVE/RET - LDA PPL ; SET FP TO PP - STA IFPL - LDA PPH - STA IFPH - LDY #$00 STY IPX JMP FETCHOP @@ -161,16 +138,6 @@ XINTERP PLA LDA (TMP),Y STA IPL DEY - - LDA IFPH - PHA ; SAVE ON STACK FOR LEAVE/RET - LDA IFPL - PHA ; SAVE ON STACK FOR LEAVE/RET - LDA PPL ; SET FP TO PP - STA IFPL - LDA PPH - STA IFPH - JMP FETCHOP ;* ;* INTERNAL DIVIDE ALGORITHM @@ -267,8 +234,6 @@ MULLP LSR TMPH ; MULTPLRH BNE MULLP STA ESTKH+1,X ; PRODH LDY IPY -; INX -; JMP NEXTOP JMP DROP ;* ;* NEGATE TOS @@ -299,10 +264,9 @@ MOD JSR _DIV DIVMOD JSR _DIV LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCC + - INX JSR _NEG - DEX -+ LDA TMPL ; REMNDRL ++ DEX + LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH STA ESTKH,X @@ -319,8 +283,6 @@ ADD LDA ESTKL,X LDA ESTKH,X ADC ESTKH+1,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ;* ;* SUB TOS FROM TOS-1 @@ -332,8 +294,6 @@ SUB LDA ESTKL+1,X LDA ESTKH+1,X SBC ESTKH,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ; ;* @@ -348,23 +308,21 @@ IDXW LDA ESTKL,X LDA ESTKH,X ADC ESTKH+1,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ;* ;* INCREMENT TOS ;* INCR INC ESTKL,X - BNE INCR1 + BNE + INC ESTKH,X -INCR1 JMP NEXTOP ++ JMP NEXTOP ;* ;* DECREMENT TOS ;* DECR LDA ESTKL,X - BNE DECR1 + BNE + DEC ESTKH,X -DECR1 DEC ESTKL,X ++ DEC ESTKL,X JMP NEXTOP ;* ;* BITWISE COMPLIMENT TOS @@ -385,8 +343,6 @@ BAND LDA ESTKL+1,X LDA ESTKH+1,X AND ESTKH,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ;* ;* INCLUSIVE OR TOS TO TOS-1 @@ -397,8 +353,6 @@ IOR LDA ESTKL+1,X LDA ESTKH+1,X ORA ESTKH,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ;* ;* EXLUSIVE OR TOS TO TOS-1 @@ -409,8 +363,6 @@ XOR LDA ESTKL+1,X LDA ESTKH+1,X EOR ESTKH,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ;* ;* SHIFT TOS-1 LEFT BY TOS @@ -418,21 +370,21 @@ XOR LDA ESTKL+1,X SHL STY IPY LDA ESTKL,X CMP #$08 - BCC SHL1 + BCC + LDY ESTKL+1,X STY ESTKH+1,X LDY #$00 STY ESTKL+1,X SBC #$08 -SHL1 TAY - BEQ SHL3 ++ TAY + BEQ + LDA ESTKL+1,X -SHL2 ASL +- ASL ROL ESTKH+1,X DEY - BNE SHL2 + BNE - STA ESTKL+1,X -SHL3 LDY IPY ++ LDY IPY JMP DROP ;* ;* SHIFT TOS-1 RIGHT BY TOS @@ -440,53 +392,40 @@ SHL3 LDY IPY SHR STY IPY LDA ESTKL,X CMP #$08 - BCC SHR2 + BCC ++ LDY ESTKH+1,X STY ESTKL+1,X CPY #$80 LDY #$00 - BCC SHR1 + BCC + DEY -SHR1 STY ESTKH+1,X ++ STY ESTKH+1,X SEC SBC #$08 -SHR2 TAY - BEQ SHR4 +++ TAY + BEQ + LDA ESTKH+1,X -SHR3 CMP #$80 +- CMP #$80 ROR ROR ESTKL+1,X DEY - BNE SHR3 + BNE - STA ESTKH+1,X -SHR4 LDY IPY ++ LDY IPY JMP DROP ;* -;* LOGICAL NOT -;* -LNOT LDA ESTKL,X - ORA ESTKH,X - BEQ LNOT1 - LDA #$FF -LNOT1 EOR #$FF - STA ESTKL,X - STA ESTKH,X - JMP NEXTOP -;* ;* LOGICAL AND ;* LAND LDA ESTKL+1,X ORA ESTKH+1,X - BEQ LAND2 + BEQ ++ LDA ESTKL,X ORA ESTKH,X - BEQ LAND1 + BEQ + LDA #$FF -LAND1 STA ESTKL+1,X ++ STA ESTKL+1,X STA ESTKH+1,X -;LAND2 INX -; JMP NEXTOP -LAND2 JMP DROP +++ JMP DROP ;* ;* LOGICAL OR ;* @@ -494,13 +433,11 @@ LOR LDA ESTKL,X ORA ESTKH,X ORA ESTKL+1,X ORA ESTKH+1,X - BEQ LOR1 + BEQ + LDA #$FF STA ESTKL+1,X STA ESTKH+1,X -;LOR1 INX -; JMP NEXTOP -LOR1 JMP DROP ++ JMP DROP ;* ;* DUPLICATE TOS ;* @@ -511,10 +448,20 @@ DUP DEX STA ESTKH,X JMP NEXTOP ;* +;* LOGICAL NOT +;* +LNOT LDA ESTKL,X + ORA ESTKH,X + BNE + + LDA #$FF + STA ESTKL,X + STA ESTKH,X + JMP NEXTOP +;* ;* CONSTANT ;* ZERO DEX - LDA #$00 ++ LDA #$00 STA ESTKL,X STA ESTKH,X JMP NEXTOP @@ -523,19 +470,34 @@ CFFB LDA #$FF CB LDA #$00 DEX STA ESTKH,X - +INC_IP + INY ;+INC_IP LDA (IP),Y STA ESTKL,X JMP NEXTOP ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) ;* -LA = * -CW DEX - INY ;+INC_IP +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +LA INY ;+INC_IP + BMI - + DEX LDA (IP),Y STA ESTKL,X - +INC_IP + INY + LDA (IP),Y + STA ESTKH,X + JMP NEXTOP +CW DEX + INY ;+INC_IP + LDA (IP),Y + STA ESTKL,X + INY LDA (IP),Y STA ESTKH,X JMP NEXTOP @@ -543,9 +505,9 @@ CW DEX ;* CONSTANT STRING ;* CS DEX - INY ;+INC_IP + ;INY ;+INC_IP TYA ; NORMALIZE IP - CLC + SEC ADC IPL STA IPL LDA #$00 @@ -609,46 +571,38 @@ _CEXS LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING ;* ;* LOAD VALUE FROM ADDRESS TAG ;* -!IF SELFMODIFY { LB LDA ESTKL,X - STA LBLDA+1 - LDA ESTKH,X - STA LBLDA+2 -LBLDA LDA $FFFF + STA ESTKH-1,X + LDA (ESTKH-1,X) STA ESTKL,X LDA #$00 STA ESTKH,X JMP NEXTOP -} ELSE { -LB LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - STY IPY - LDY #$00 - LDA (TMP),Y - STA ESTKL,X - STY ESTKH,X - LDY IPY - JMP NEXTOP -} LW LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - STY IPY - LDY #$00 - LDA (TMP),Y + STA ESTKH-1,X + LDA (ESTKH-1,X) STA ESTKL,X - INY - LDA (TMP),Y + INC ESTKH-1,X + BEQ + + LDA (ESTKH-1,X) + STA ESTKH,X + JMP NEXTOP ++ INC ESTKH,X + LDA (ESTKH-1,X) STA ESTKH,X - LDY IPY JMP NEXTOP ;* ;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* -LLA +INC_IP +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +LLA INY ;+INC_IP + BMI - LDA (IP),Y DEX CLC @@ -661,7 +615,7 @@ LLA +INC_IP ;* ;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* -LLB +INC_IP +LLB INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -672,7 +626,7 @@ LLB +INC_IP STA ESTKH,X LDY IPY JMP NEXTOP -LLW +INC_IP +LLW INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -687,39 +641,22 @@ LLW +INC_IP ;* ;* LOAD VALUE FROM ABSOLUTE ADDRESS ;* -!IF SELFMODIFY { -LAB INY ;+INC_IP +LAB INY ;+INC_IP LDA (IP),Y - STA LABLDA+1 - +INC_IP + STA ESTKH-2,X + INY ;+INC_IP LDA (IP),Y - STA LABLDA+2 -LABLDA LDA $FFFF + STA ESTKH-1,X + LDA (ESTKH-2,X) DEX STA ESTKL,X LDA #$00 STA ESTKH,X JMP NEXTOP -} ELSE { -LAB INY ;+INC_IP +LAW INY ;+INC_IP LDA (IP),Y STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - STY IPY - LDY #$00 - LDA (TMP),Y - DEX - STA ESTKL,X - STY ESTKH,X - LDY IPY - JMP NEXTOP -} -LAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - +INC_IP + INY ;+INC_IP LDA (IP),Y STA TMPH STY IPY @@ -735,56 +672,39 @@ LAW INY ;+INC_IP ;* ;* STORE VALUE TO ADDRESS ;* -!IF SELFMODIFY { SB LDA ESTKL,X - STA SBSTA+1 - LDA ESTKH,X - STA SBSTA+2 + STA ESTKH-1,X LDA ESTKL+1,X -SBSTA STA $FFFF - INX -; INX -; JMP NEXTOP - JMP DROP -} ELSE { -SB LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - LDA ESTKL+1,X - STY IPY - LDY #$00 - STA (TMP),Y - LDY IPY + STA (ESTKH-1,X) INX JMP DROP -} SW LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - STY IPY - LDY #$00 + STA ESTKH-1,X LDA ESTKL+1,X - STA (TMP),Y - INY + STA (ESTKH-1,X) LDA ESTKH+1,X - STA (TMP),Y - LDY IPY + INC ESTKH-1,X + BEQ + + STA (ESTKH-1,X) + INX + JMP DROP ++ INC ESTKH,X + STA (ESTKH-1,X) INX JMP DROP ;* ;* STORE VALUE TO LOCAL FRAME OFFSET ;* -SLB +INC_IP +SLB INY ;+INC_IP LDA (IP),Y STY IPY TAY LDA ESTKL,X STA (IFP),Y LDY IPY + BMI FIXDROP JMP DROP -SLW +INC_IP +SLW INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -794,11 +714,20 @@ SLW +INC_IP LDA ESTKH,X STA (IFP),Y LDY IPY + BMI FIXDROP JMP DROP +FIXDROP TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP DROP ;* ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* -DLB +INC_IP +DLB INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -806,7 +735,7 @@ DLB +INC_IP STA (IFP),Y LDY IPY JMP NEXTOP -DLW +INC_IP +DLW INY ;+INC_IP LDA (IP),Y STY IPY TAY @@ -820,34 +749,27 @@ DLW +INC_IP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS ;* -!IF SELFMODIFY { -SAB INY ;+INC_IP +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +SAB INY ;+INC_IP + BMI - LDA (IP),Y - STA SABSTA+1 - +INC_IP + STA ESTKH-2,X + INY ;+INC_IP LDA (IP),Y - STA SABSTA+2 + STA ESTKH-1,X LDA ESTKL,X -SABSTA STA $FFFF + STA (ESTKH-2,X) JMP DROP -} ELSE { -SAB INY ;+INC_IP +SAW INY ;+INC_IP LDA (IP),Y STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - LDA ESTKL,X - STY IPY - LDY #$00 - STA (TMP),Y - LDY IPY - JMP DROP -} -SAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - +INC_IP + INY ;+INC_IP LDA (IP),Y STA TMPH STY IPY @@ -858,38 +780,24 @@ SAW INY ;+INC_IP LDA ESTKH,X STA (TMP),Y LDY IPY + BMI FIXDROP JMP DROP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* -!IF SELFMODIFY { -DAB INY ;+INC_IP +DAB INY ;+INC_IP LDA (IP),Y - STA DABSTA+1 - +INC_IP + STA ESTKH-2,X + INY ;+INC_IP LDA (IP),Y - STA DABSTA+2 + STA ESTKH-1,X LDA ESTKL,X -DABSTA STA $FFFF + STA (ESTKH-2,X) JMP NEXTOP -} ELSE { -DAB INY ;+INC_IP +DAW INY ;+INC_IP LDA (IP),Y STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - STY IPY - LDY #$00 - LDA ESTKL,X - STA (TMP),Y - LDY IPY - JMP NEXTOP -} -DAW INY ;+INC_IP - LDA (IP),Y - STA TMPL - +INC_IP + INY ;+INC_IP LDA (IP),Y STA TMPH STY IPY @@ -913,8 +821,6 @@ ISEQ LDA ESTKL,X ISTRU LDA #$FF STA ESTKL+1,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ; ISNE LDA ESTKL,X @@ -926,45 +832,47 @@ ISNE LDA ESTKL,X ISFLS LDA #$00 STA ESTKL+1,X STA ESTKH+1,X -; INX -; JMP NEXTOP JMP DROP ; ISGE LDA ESTKL+1,X CMP ESTKL,X LDA ESTKH+1,X SBC ESTKH,X - BVC ISGE1 - EOR #$80 -ISGE1 BPL ISTRU + BVS + + BPL ISTRU BMI ISFLS ++ BPL ISFLS + BMI ISTRU ; ISGT LDA ESTKL,X CMP ESTKL+1,X LDA ESTKH,X SBC ESTKH+1,X - BVC ISGT1 - EOR #$80 -ISGT1 BMI ISTRU + BVS + + BMI ISTRU BPL ISFLS ++ BMI ISFLS + BPL ISTRU ; ISLE LDA ESTKL,X CMP ESTKL+1,X LDA ESTKH,X SBC ESTKH+1,X - BVC ISLE1 - EOR #$80 -ISLE1 BPL ISTRU + BVS + + BPL ISTRU BMI ISFLS ++ BPL ISFLS + BMI ISTRU ; ISLT LDA ESTKL+1,X CMP ESTKL,X LDA ESTKH+1,X SBC ESTKH,X - BVC ISLT1 - EOR #$80 -ISLT1 BMI ISTRU + BVS + + BMI ISTRU BPL ISFLS ++ BMI ISFLS + BPL ISTRU ;* ;* BRANCHES ;* @@ -972,9 +880,18 @@ BRTRU INX LDA ESTKH-1,X ORA ESTKL-1,X BNE BRNCH -NOBRNCH INY ;+INC_IP - +INC_IP +NOBRNCH INY ;+INC_IP + INY ;+INC_IP + BMI FIXNEXT JMP NEXTOP +FIXNEXT TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP NEXTOP BRFLS INX LDA ESTKH-1,X ORA ESTKL-1,X @@ -1018,20 +935,34 @@ BRGT INX CMP ESTKL,X LDA ESTKH-1,X SBC ESTKH,X + BVS + BPL NOBRNCH BMI BRNCH ++ BPL BRNCH + BMI NOBRNCH BRLT INX LDA ESTKL,X CMP ESTKL-1,X LDA ESTKH,X SBC ESTKH-1,X + BVS + BPL NOBRNCH BMI BRNCH -IBRNCH LDA IPL ++ BPL BRNCH + BMI NOBRNCH +IBRNCH TYA ; FLATTEN IP CLC + ADC IPL + STA TMPL + LDA #$00 + TAY + ADC IPH + STA TMPH ; ADD BRANCH OFFSET + LDA TMPL + ;CLC ; BETTER NOT CARRY OUT OF IP+Y ADC ESTKL,X STA IPL - LDA IPH + LDA TMPH ADC ESTKH,X STA IPH JMP DROP @@ -1107,7 +1038,7 @@ ENTER LDA IFPH ;* ;* LEAVE FUNCTION ;* -LEAVE INY ;+INC_IP +LEAVE INY ;+INC_IP LDA (IP),Y CLC ADC IFPL From f039572dde876e0f89df109046f0424b5f28b08b Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 1 Feb 2018 12:56:06 -0800 Subject: [PATCH 12/40] Synchronize VMs --- src/vmsrc/plvm802.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vmsrc/plvm802.s b/src/vmsrc/plvm802.s index 1024c86..179ac0a 100644 --- a/src/vmsrc/plvm802.s +++ b/src/vmsrc/plvm802.s @@ -770,9 +770,9 @@ CW INY ;+INC_IP ;* ;* CONSTANT STRING ;* -CS INY ;+INC_IP +CS ;INY ;+INC_IP TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK - CLC + SEC ADC IP STA IP PHA @@ -780,9 +780,9 @@ CS INY ;+INC_IP TAY JMP NEXTOP ; -CSX INY ;+INC_IP +CSX ;INY ;+INC_IP TYA ; NORMALIZE IP - CLC + SEC ADC IP STA IP LDA PP ; SCAN POOL FOR STRING ALREADY THERE From 10274bdf27ce5e3de56980a7861baee36df62421 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 1 Feb 2018 18:10:02 -0800 Subject: [PATCH 13/40] Synchronize CMDs --- src/vmsrc/a1cmd.pla | 626 +++++++++++++++++++++++-------------------- src/vmsrc/soscmd.pla | 345 ++++++++++++++++++------ 2 files changed, 594 insertions(+), 377 deletions(-) diff --git a/src/vmsrc/a1cmd.pla b/src/vmsrc/a1cmd.pla index 71d6841..bd9a226 100755 --- a/src/vmsrc/a1cmd.pla +++ b/src/vmsrc/a1cmd.pla @@ -1,3 +1,6 @@ +const FALSE = 0 +const TRUE = not FALSE + const RELADDR = $1000 const inbuff = $200 const freemem = $0006 @@ -31,15 +34,19 @@ const CFFAEntryPtr = $0B // Pedefined functions. // predef syscall(cmd,null)#1, call(addr,areg,xreg,yreg,status)#1 -predef crout()#0, cout(c)#0, prstr(s)#0, print(i)#0, cin()#1, rdstr(p)#1, toupper(c)#1 +predef crout()#0, cout(c)#0, prstr(s)#0, print(i)#0, prbyte(b)#0, prword(w)#0 +predef cin()#1, rdstr(p)#1, toupper(c)#1, strcpy(dst,src)#1, strcat(dst,src)#1 predef markheap()#1, allocheap(size)#1, allocalignheap(size, pow2, freeaddr), releaseheap(newheap)#1, availheap()#1 predef memset(addr,value,size)#0, memcpy(dst,src,size)#0 -predef uword_isgt(a,b)#1, uword_isge(a,b)#1, uword_islt(a,b)#1, uword_isle(a,b)#1, sext(a)#1, divmod(a,b)#2 -predef loadmod(mod)#1, execmod(modfile)#1, lookupstrmod(str)#1 +predef uword_isgt(a,b)#1, uword_isge(a,b)#1, uword_islt(a,b)#1, uword_isle(a,b)#1 +predef sext(a)#1, divmod(a,b)#2, execmod(modfile)#1 // -// System variables. +// Exported CMDSYS table // -word version = $0100 // 01.00 +word version = $0100 // 01.00 +word syspath +word syscmdln +word = @execmod word systemflags = 0 word heap word symtbl, lastsym @@ -68,14 +75,17 @@ word cmdptr = @hexchar // make it point to a zero // byte syslibstr[] = "CMDSYS" byte machidstr[] = "MACHID" -byte syspathstr[] = "SYSPATH" byte putcstr[] = "PUTC" byte putlnstr[] = "PUTLN" byte putsstr[] = "PUTS" byte putistr[] = "PUTI" +byte putbstr[] = "PUTB" +byte putwstr[] = "PUTH" byte getcstr[] = "GETC" byte getsstr[] = "GETS" byte toupstr[] = "TOUPPER" +byte strcpystr[] = "STRCPY" +byte strcatstr[] = "STRCAT" byte sysstr[] = "SYSCALL" byte callstr[] = "CALL" byte hpmarkstr[] = "HEAPMARK" @@ -91,8 +101,6 @@ byte uisltstr[] = "ISULT" byte uislestr[] = "ISULE" byte sextstr[] = "SEXT" byte divmodstr[] = "DIVMOD" -byte argstr[] = "ARGS" -byte syspath[] = "" // Set to NULL word exports[] = @syslibstr, @version word = @sysstr, @syscall word = @callstr, @call @@ -100,6 +108,8 @@ word = @putcstr, @cout word = @putlnstr, @crout word = @putsstr, @prstr word = @putistr, @print +word = @putbstr, @prbyte +word = @putwstr, @prword word = @getcstr, @cin word = @getsstr, @rdstr word = @toupstr, @toupper @@ -110,6 +120,8 @@ word = @hprelstr, @releaseheap word = @hpavlstr, @availheap word = @memsetstr, @memset word = @memcpystr, @memcpy +word = @strcpystr, @strcpy +word = @strcatstr, @strcat word = @uisgtstr, @uword_isgt word = @uisgestr, @uword_isge word = @uisltstr, @uword_islt @@ -117,11 +129,19 @@ word = @uislestr, @uword_isle word = @sextstr, @sext word = @divmodstr, @divmod word = @machidstr, @machid -word = @syspathstr,@syspath -word = @argstr, @cmdptr word = 0 word syslibsym = @exports // +// Utility functions +// +asm saveX#0 + STX XREG+1 +end +asm restoreX#0 +XREG LDX #$00 + RTS +end +// // CALL CFFA1 API ENTRYPOINT // SYSCALL(CMD, 0) // @@ -189,189 +209,189 @@ end // With optimizations from Peter Ferrie // asm memset(addr,value,size)#0 - LDA ESTKL+2,X - STA DSTL - LDA ESTKH+2,X - STA DSTH - LDY ESTKL,X - BEQ + - INC ESTKH,X - LDY #$00 -+ LDA ESTKH,X - BEQ SETMEX + LDA ESTKL+2,X + STA DSTL + LDA ESTKH+2,X + STA DSTH + LDY ESTKL,X + BEQ + + INC ESTKH,X + LDY #$00 ++ LDA ESTKH,X + BEQ SETMEX SETMLPL CLC - LDA ESTKL+1,X + LDA ESTKL+1,X SETMLPH STA (DST),Y - DEC ESTKL,X - BEQ ++ -- INY - BEQ + --- BCS SETMLPL - SEC - LDA ESTKH+1,X - BCS SETMLPH -+ INC DSTH - BNE -- -++ DEC ESTKH,X - BNE - + DEC ESTKL,X + BEQ ++ +- INY + BEQ + +-- BCS SETMLPL + SEC + LDA ESTKH+1,X + BCS SETMLPH ++ INC DSTH + BNE -- +++ DEC ESTKH,X + BNE - SETMEX INX - INX - INX - RTS + INX + INX + RTS end // // COPY MEMORY // MEMCPY(DSTADDR, SRCADDR, SIZE) // asm memcpy(dst,src,size)#0 - INX - INX - INX - LDA ESTKL-3,X - ORA ESTKH-3,X - BEQ CPYMEX - LDA ESTKL-2,X - CMP ESTKL-1,X - LDA ESTKH-2,X - SBC ESTKH-1,X - BCC REVCPY + INX + INX + INX + LDA ESTKL-3,X + ORA ESTKH-3,X + BEQ CPYMEX + LDA ESTKL-2,X + CMP ESTKL-1,X + LDA ESTKH-2,X + SBC ESTKH-1,X + BCC REVCPY ; ; FORWARD COPY ; - LDA ESTKL-1,X - STA DSTL - LDA ESTKH-1,X - STA DSTH - LDA ESTKL-2,X - STA SRCL - LDA ESTKH-2,X - STA SRCH - LDY ESTKL-3,X - BEQ FORCPYLP - INC ESTKH-3,X - LDY #$00 + LDA ESTKL-1,X + STA DSTL + LDA ESTKH-1,X + STA DSTH + LDA ESTKL-2,X + STA SRCL + LDA ESTKH-2,X + STA SRCH + LDY ESTKL-3,X + BEQ FORCPYLP + INC ESTKH-3,X + LDY #$00 FORCPYLP LDA (SRC),Y - STA (DST),Y - INY - BNE + - INC DSTH - INC SRCH -+ DEC ESTKL-3,X - BNE FORCPYLP - DEC ESTKH-3,X - BNE FORCPYLP - RTS + STA (DST),Y + INY + BNE + + INC DSTH + INC SRCH ++ DEC ESTKL-3,X + BNE FORCPYLP + DEC ESTKH-3,X + BNE FORCPYLP + RTS ; ; REVERSE COPY ; REVCPY ;CLC - LDA ESTKL-3,X - ADC ESTKL,X - STA DSTL - LDA ESTKH-3,X - ADC ESTKH,X - STA DSTH - CLC - LDA ESTKL-3,X - ADC ESTKL-2,X - STA SRCL - LDA ESTKH-3,X - ADC ESTKH-2,X - STA SRCH - DEC DSTH - DEC SRCH - LDY #$FF - LDA ESTKL-3,X - BEQ REVCPYLP - INC ESTKH-3,X + LDA ESTKL-3,X + ADC ESTKL-1,X + STA DSTL + LDA ESTKH-3,X + ADC ESTKH-1,X + STA DSTH + CLC + LDA ESTKL-3,X + ADC ESTKL-2,X + STA SRCL + LDA ESTKH-3,X + ADC ESTKH-2,X + STA SRCH + DEC DSTH + DEC SRCH + LDY #$FF + LDA ESTKL-3,X + BEQ REVCPYLP + INC ESTKH-3,X REVCPYLP LDA (SRC),Y - STA (DST),Y - DEY - CPY #$FF - BNE + - DEC DSTH - DEC SRCH -+ DEC ESTKL-3,X - BNE REVCPYLP - DEC ESTKH-3,X - BNE REVCPYLP + STA (DST),Y + DEY + CPY #$FF + BNE + + DEC DSTH + DEC SRCH ++ DEC ESTKL-3,X + BNE REVCPYLP + DEC ESTKH-3,X + BNE REVCPYLP CPYMEX RTS end // // Unsigned word comparisons. // asm uword_isge(a,b)#1 - LDA ESTKL+1,X - CMP ESTKL,X - LDA ESTKH+1,X - SBC ESTKH,X - LDA #$FF - ADC #$00 - EOR #$FF - STA ESTKL+1,X - STA ESTKH+1,X - INX - RTS + LDA ESTKL+1,X + CMP ESTKL,X + LDA ESTKH+1,X + SBC ESTKH,X + LDA #$FF + ADC #$00 + EOR #$FF + STA ESTKL+1,X + STA ESTKH+1,X + INX + RTS end asm uword_isle(a,b)#1 - LDA ESTKL,X - CMP ESTKL+1,X - LDA ESTKH,X - SBC ESTKH+1,X - LDA #$FF - ADC #$00 - EOR #$FF - STA ESTKL+1,X - STA ESTKH+1,X - INX - RTS + LDA ESTKL,X + CMP ESTKL+1,X + LDA ESTKH,X + SBC ESTKH+1,X + LDA #$FF + ADC #$00 + EOR #$FF + STA ESTKL+1,X + STA ESTKH+1,X + INX + RTS end asm uword_isgt(a,b)#1 - LDA ESTKL,X - CMP ESTKL+1,X - LDA ESTKH,X - SBC ESTKH+1,X - LDA #$FF - ADC #$00 - STA ESTKL+1,X - STA ESTKH+1,X - INX - RTS + LDA ESTKL,X + CMP ESTKL+1,X + LDA ESTKH,X + SBC ESTKH+1,X + LDA #$FF + ADC #$00 + STA ESTKL+1,X + STA ESTKH+1,X + INX + RTS end asm uword_islt(a,b)#1 - LDA ESTKL+1,X - CMP ESTKL,X - LDA ESTKH+1,X - SBC ESTKH,X - LDA #$FF - ADC #$00 - STA ESTKL+1,X - STA ESTKH+1,X - INX - RTS + LDA ESTKL+1,X + CMP ESTKL,X + LDA ESTKH+1,X + SBC ESTKH,X + LDA #$FF + ADC #$00 + STA ESTKL+1,X + STA ESTKH+1,X + INX + RTS end asm divmod(a,b)#2 JSR INTERP ; CALL DINTERP !BYTE $36, $5C ; DIVMOD, RET end asm sext(a)#1 - LDY #$00 - LDA ESTKL,X - BPL + - DEY -+ STY ESTKH,X - RTS + LDY #$00 + LDA ESTKL,X + BPL + + DEY ++ STY ESTKH,X + RTS end // // Addresses of internal routines. // asm interp()#1 - DEX - LDA #IINTERP - STA ESTKH,X - RTS + DEX + LDA #IINTERP + STA ESTKH,X + RTS end // // A DCI string is one that has the high bit set for every character except the last. @@ -389,28 +409,28 @@ end // return len //end asm dcitos(dci, str)#1 - LDA ESTKL,X - STA DSTL - LDA ESTKH,X - STA DSTH - LDA ESTKL+1,X - STA SRCL - LDA ESTKH+1,X - STA SRCH - LDY #$00 -- LDA (SRC),Y - CMP #$80 - AND #$7F - INY - STA (DST),Y - BCS - - TYA - LDY #$00 - STA (DST),Y - INX - STA ESTKL,X - STY ESTKH,X - RTS + LDA ESTKL,X + STA DSTL + LDA ESTKH,X + STA DSTH + LDA ESTKL+1,X + STA SRCL + LDA ESTKH+1,X + STA SRCH + LDY #$00 +- LDA (SRC),Y + CMP #$80 + AND #$7F + INY + STA (DST),Y + BCS - + TYA + LDY #$00 + STA (DST),Y + INX + STA ESTKL,X + STY ESTKH,X + RTS end //def stodci(str, dci) // byte len, c @@ -429,43 +449,43 @@ end // return ^str //end asm stodci(str, dci)#1 - LDA ESTKL,X - STA DSTL - LDA ESTKH,X - STA DSTH - LDA ESTKL+1,X - STA SRCL - LDA ESTKH+1,X - STA SRCH - INX - LDY #$00 - LDA (SRC),Y - BEQ ++ - TAY - LDA (SRC),Y - JSR TOUPR - BNE + -- LDA (SRC),Y - JSR TOUPR - ORA #$80 -+ DEY - STA (DST),Y - BNE - - LDA (SRC),Y -++ STA ESTKL,X - STY ESTKH,X - RTS + LDA ESTKL,X + STA DSTL + LDA ESTKH,X + STA DSTH + LDA ESTKL+1,X + STA SRCL + LDA ESTKH+1,X + STA SRCH + INX + LDY #$00 + LDA (SRC),Y + BEQ ++ + TAY + LDA (SRC),Y + JSR TOUPR + BNE + +- LDA (SRC),Y + JSR TOUPR + ORA #$80 ++ DEY + STA (DST),Y + BNE - + LDA (SRC),Y +++ STA ESTKL,X + STY ESTKH,X + RTS end asm toupper(c)#1 - LDA ESTKL,X + LDA ESTKL,X TOUPR AND #$7F - CMP #'a' - BCC + - CMP #'z'+1 - BCS + - SBC #$1F -+ STA ESTKL,X - RTS + CMP #'a' + BCC + + CMP #'z'+1 + BCS + + SBC #$1F ++ STA ESTKL,X + RTS end // // Module symbols are entered into the symbol table @@ -493,77 +513,74 @@ end // loop // return 0 asm lookuptbl(dci, tbl)#1 - LDA ESTKL,X - STA DSTL - LDA ESTKH,X - STA DSTH - LDA ESTKL+1,X - STA SRCL - LDA ESTKH+1,X - STA SRCH - LDY #$00 -- LDA (DST),Y - BEQ + - CMP (SRC),Y - BNE ++ - INY - ASL - BCS - - LDA (DST),Y - PHA - INY - LDA (DST),Y - TAY - PLA -+ INX - STA ESTKL,X - STY ESTKH,X - RTS -++ LDY #$00 --- LDA (DST),Y - INC DSTL - BEQ + ---- ASL - BCS -- - LDA #$02 - ADC DSTL - STA DSTL - BCC - - INC DSTH - BCS - -+ INC DSTH - BNE --- + LDA ESTKL,X + STA DSTL + LDA ESTKH,X + STA DSTH + INX + LDA ESTKL,X + STA SRCL + LDA ESTKH,X + STA SRCH +-- LDY #$00 +- LDA (DST),Y + BEQ + + CMP (SRC),Y + BNE ++ + INY + ASL + BCS - + LDA (DST),Y + STA ESTKL,X ; MATCH + INY + LDA (DST),Y + STA ESTKH,X + RTS ++ STA ESTKL,X ; NO MATCH + STA ESTKH,X + RTS +++ +- LDA (DST),Y ; NEXT ENTRY + BPL + + INY + BNE - ++ TYA + CLC + ADC #$03 + ADC DSTL + STA DSTL + BCC -- + INC DSTH + BNE -- end // // CONSOLE I/O // asm cout(c)#0 - LDA ESTKL,X - JSR TOUPR - ORA #$80 - JMP $FFEF + LDA ESTKL,X + JSR TOUPR + ORA #$80 + JMP $FFEF end asm cin()#1 - DEX -- LDA $D011 - BPL - - LDA $D010 - AND #$7F - STA ESTKL,X - LDA #$00 - STA ESTKH,X - RTS + DEX +- LDA $D011 + BPL - + LDA $D010 + AND #$7F + STA ESTKL,X + LDA #$00 + STA ESTKH,X + RTS end def crout()#0 cout($0D) end def prstr(str)#0 byte i - i = 1 - while i <= ^str - cout((str)[i]) - i = i + 1 - loop + for i = 1 to ^str + cout(^(str + i)) + next end def print(i)#0 if i < 0; cout('-'); i = -i; fin @@ -580,7 +597,7 @@ def rdstr(prompt)#1 when ch is $15 // right arrow if ^inbuff < maxlen //inbuff.0 < maxlen - inbuff.0 = inbuff.0 + 1 + inbuff.0++ ch = inbuff[inbuff.0] cout(ch) fin @@ -589,7 +606,7 @@ def rdstr(prompt)#1 if inbuff.0 cout('\\') cout(inbuff[inbuff.0]) - inbuff.0 = inbuff.0 - 1 + inbuff.0-- fin break is $04 // ctrl-d @@ -597,8 +614,8 @@ def rdstr(prompt)#1 cout('#') cout(inbuff[inbuff.0]) memcpy(inbuff + inbuff.0, inbuff + inbuff.0 + 1, maxlen - inbuff.0) - maxlen = maxlen - 1 - inbuff.0 = inbuff.0 - 1 + maxlen-- + inbuff.0-- fin break is $0C // ctrl-l @@ -617,7 +634,7 @@ def rdstr(prompt)#1 otherwise if ch >= ' ' cout(ch) - inbuff.0 = inbuff.0 + 1 + inbuff.0++ inbuff[inbuff.0] = ch if inbuff.0 > maxlen maxlen = inbuff.0 @@ -637,6 +654,19 @@ def prword(v)#0 prbyte(v) end // +// String routines. +// +def strcpy(dst, src)#1 + memcpy(dst+1, src+1, ^src) + ^dst = ^src + return dst +end +def strcat(dst, src)#1 + memcpy(dst + ^dst + 1, src + 1, ^src) + ^dst = ^dst + ^src + return dst +end +// // CFFA1 routines // FILE I/O // @@ -847,9 +877,9 @@ def loadmod(mod)#1 addr = rld=>1 + modfix //if uword_isge(addr, modaddr) // Skip fixups to header //if type & $80 // WORD sized fixup. - // fixup = *addr + fixup = *addr //else // BYTE sized fixup. - fixup = ^addr + // fixup = ^addr //fin if ^rld & $10 // EXTERN reference. fixup = fixup + lookupextern(esd, rld->3) @@ -921,17 +951,17 @@ end def stripchars(strptr)#1 while ^strptr and ^(strptr + 1) <> ' ' memcpy(strptr + 1, strptr + 2, ^strptr) - ^strptr = ^strptr - 1 + ^strptr-- loop return ^strptr end def stripspaces(strptr)#0 while ^strptr and ^(strptr + ^strptr) <= ' ' - ^strptr = ^strptr - 1 + ^strptr-- loop while ^strptr and ^(strptr + 1) <= ' ' memcpy(strptr + 1, strptr + 2, ^strptr) - ^strptr = ^strptr - 1 + ^strptr-- loop end def striptrail(strptr)#0 @@ -952,7 +982,7 @@ def parsecmd(strptr)#1 if ^strptr cmd = ^(strptr + 1) memcpy(strptr + 1, strptr + 2, ^strptr) - ^strptr = ^strptr - 1 + ^strptr-- fin stripspaces(strptr) return cmd @@ -964,14 +994,14 @@ def execmod(modfile)#1 perr = 1 if stodci(modfile, @moddci) saveheap = heap - savesym = lastsym - saveflags = systemflags - if loadmod(@moddci) < modkeep - lastsym = savesym - heap = saveheap - fin - ^lastsym = 0 - systemflags = saveflags + savesym = lastsym + saveflags = systemflags + if loadmod(@moddci) < modkeep + lastsym = savesym + heap = saveheap + fin + ^lastsym = 0 + systemflags = saveflags fin return -perr end @@ -1001,7 +1031,7 @@ cmdptr = heap memset(cmdptr, 0, 128) readfile(@autorun, cmdptr + 1) while ^(cmdptr + ^cmdptr + 1) >= ' ' - ^cmdptr = ^cmdptr + 1 + ^cmdptr++ loop perr = 0 // @@ -1015,24 +1045,24 @@ fin // // Handle commands. // -while 1 +while TRUE if ^cmdptr when toupper(parsecmd(cmdptr)) is 'Q' - quit - is 'M' - syscall($02, 0) - break - is '+' - execmod(cmdptr) - break - otherwise - prstr(@huhstr) + quit + is 'M' + syscall($02, 0) + break + is '+' + execmod(cmdptr) + break + otherwise + prstr(@huhstr) wend if perr prstr(@errorstr) - prbyte(perr) - perr = 0 + prbyte(perr) + perr = 0 else prstr(@okstr) fin diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index 1beed56..840fa08 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -26,13 +26,14 @@ const O_READ_WRITE = 3 // Pedefined functions. // predef syscall(cmd,params)#1, call(addr,areg,xreg,yreg,status)#1 -predef crout()#0, cout(c)#0, prstr(s)#0, print(i)#0, cin()#1, rdstr(p)#1, toupper(c)#1 +predef crout()#0, cout(c)#0, prstr(s)#0, print(i)#0, prbyte(b)#0, prword(w)#0 +predef cin()#1, rdstr(p)#1, toupper(c)#1, strcpy(dst,src)#1, strcat(dst,src)#1 predef markheap()#1, allocheap(size)#1, allocalignheap(size, pow2, freeaddr), releaseheap(newheap)#1, availheap()#1 predef memset(addr,value,size)#0, memcpy(dst,src,size)#0 predef uword_isgt(a,b)#1, uword_isge(a,b)#1, uword_islt(a,b)#1, uword_isle(a,b)#1, sext(a)#1, divmod(a,b)#2 predef execmod(modfile)#1 // -// System variables. +// Exported CMDSYS table // word version = $0100 // 01.00 word syspath @@ -62,9 +63,13 @@ byte putcstr[] = "PUTC" byte putlnstr[] = "PUTLN" byte putsstr[] = "PUTS" byte putistr[] = "PUTI" +byte putbstr[] = "PUTB" +byte putwstr[] = "PUTH" byte getcstr[] = "GETC" byte getsstr[] = "GETS" byte toupstr[] = "TOUPPER" +byte strcpystr[] = "STRCPY" +byte strcatstr[] = "STRCAT" byte hpmarkstr[] = "HEAPMARK" byte hpalignstr[] = "HEAPALLOCALIGN" byte hpallocstr[] = "HEAPALLOC" @@ -79,9 +84,6 @@ byte uislestr[] = "ISULE" byte sysmods[] // overlay with exported strings byte sextstr[] = "SEXT" byte divmodstr[] = "DIVMOD" -byte loadstr[] = "MODLOAD" -byte execstr[] = "MODEXEC" -byte modadrstr[] = "RELADDR" byte prefix[] // Overlay with exported symbols table word exports[] = @sysmodstr, @version word = @sysstr, @syscall @@ -90,6 +92,8 @@ word = @putcstr, @cout word = @putlnstr, @crout word = @putsstr, @prstr word = @putistr, @print +word = @putbstr, @prbyte +word = @putwstr, @prword word = @getcstr, @cin word = @getsstr, @rdstr word = @toupstr, @toupper @@ -119,6 +123,16 @@ byte modseg[15] word symtbl, lastsym byte perr, terr, lerr // +// Utility functions +// +asm saveX#0 + STX XREG+1 +end +asm restoreX#0 +XREG LDX #$00 + RTS +end +// // CALL SOS // SYSCALL(CMD, PARAMS) // @@ -634,6 +648,176 @@ asm lookuptbl(dci, tbl)#1 + INC DSTH BNE --- end +// def lookupidx(esd, index) +// word sym +// while ^esd +// sym = esd +// esd = sym + dcitos(sym, @str) +// if esd->0 & $10 and esd->1 == index +// return sym +// fin +// esd = esd + 3 +// loop +//end +asm lookupidx(esd, index)#1 + LDA ESTKL,X + STA TMPL + INX +--- LDA ESTKH,X + STA SRCH + LDA ESTKL,X +-- STA SRCL + LDY #$00 +- LDA (SRC),Y + BPL + + INY + BNE - ++ BEQ ++ ; END OF ESD + INY + LDA (SRC),Y + INY + AND #$10 ; EXTERN FLAG? + BEQ + + LDA (SRC),Y + CMP TMPL + BEQ +++ ; MATCH ++ INY + TYA + SEC + ADC SRCL + STA ESTKL,X ; SYM PTRL + BCC -- + INC ESTKH,X ; SYM PTRH + BNE --- +++ STA ESTKL,X ; END OF ESD + STA ESTKH,X ++++ RTS +end +//def lookupdef(addr, deftbl)#1 +// while deftbl->0 == $20 +// if deftbl=>3 == addr +// return deftbl +// fin +// deftbl = deftbl + 5 +// loop +// return 0 +//end +asm lookupdef(addr, deftbl)#1 + LDA ESTKH,X + STA SRCH + LDA ESTKL,X + STA SRCL + INX +- LDY #$00 + LDA (SRC),Y + CMP #$20 ; JSR OPCODE? + BNE ++ + LDY #$03 + LDA (SRC),Y + CMP ESTKL,X + BNE + + INY + LDA (SRC),Y + CMP ESTKH,X + BNE + + LDA SRCL ; MATCH + STA ESTKL,X + LDA SRCH + STA ESTKH,X + RTS ++ LDA #$05 + CLC + ADC SRCL + STA SRCL + BCC - + INC SRCH + BNE - +++ STY ESTKL,X + STY ESTKH,X + RTS +end +// +// Reloc internal data +// +//def reloc(modfix, modofst, bytecode, rld)#3 +// word addr, fixup +// while ^rld +// if ^rld & $10 // EXTERN reference. +// return rld, addr, fixup +// fin +// addr = rld=>1 + modfix +// fixup = *addr + modofst +// if uword_isge(fixup, bytecode) // Bytecode address. +// return rld, addr, fixup +// fin +// *addr = fixup +// rld = rld + 4 +// loop +// return rld, addr, fixup +//end +asm reloc(modfix, modofst, bytecode, rld)#3 + LDA ESTKL,X + STA SRCL + LDA ESTKH,X + STA SRCH + LDY #$00 +- LDA (SRC),Y + BEQ RLDEX ; END OF RLD + PHA + INY + LDA (SRC),Y + INY + CLC + ADC ESTKL+3,X ; ADDR=ENTRY=>1+MODFIX + STA DSTL + LDA (SRC),Y + ADC ESTKH+3,X + STA DSTH + PLA + AND #$10 ; EXTERN REF - EXIT + BNE RLDEX + TAY ; FIXUP=*ADDR+MODOFST + LDA (DST),Y + INY + CLC + ADC ESTKL+2,X + STA TMPL + LDA (DST),Y + ADC ESTKH+2,X + CMP ESTKH+1,X ; FIXUP >= BYTECODE? + BCC + + STA TMPH + BNE RLDEX ; YEP, EXIT + LDA TMPL + CMP ESTKL+1,X + BCS RLDEX ; YEP, EXIT + LDA TMPH ++ STA (DST),Y ; *ADDR=FIXUP + DEY + LDA TMPL + STA (DST),Y + LDA SRCL ; NEXT ENTRY +; CLC + ADC #$04 + STA SRCL + BCC - + INC SRCH + BNE - +RLDEX INX + LDA TMPL + STA ESTKL,X + LDA TMPH + STA ESTKH,X + LDA DSTL + STA ESTKL+1,X + LDA DSTH + STA ESTKH+1,X + LDA SRCL + STA ESTKL+2,X + LDA SRCH + STA ESTKH+2,X + RTS +end // // SOS routines // FILE I/O @@ -926,21 +1110,16 @@ end def lookupextern(esd, index)#1 word sym, addr byte str[16] - while ^esd - sym = esd - esd = sym + dcitos(sym, @str) - if esd->0 & $10 and esd->1 == index - addr = lookuptbl(sym, symtbl) - if !addr - lerr = $81 - cout('?') - prstr(@str) - crout - fin - return addr + sym = lookupidx(esd, index) + if sym + addr = lookuptbl(sym, symtbl) + if !addr + perr = $81 + dcitos(sym, @str) + cout('?'); prstr(@str); crout fin - esd = esd + 3 - loop + return addr + fin return 0 end def adddef(ext, addr, deflast)#1 @@ -953,15 +1132,6 @@ def adddef(ext, addr, deflast)#1 defentry=>5 = ext // ext is byte, so this nulls out next entry return defentry end -def lookupdef(addr, deftbl)#1 - while deftbl->0 == $20 - if deftbl=>3 == addr - return deftbl - fin - deftbl = deftbl + 6 - loop - return 0 -end def loadmod(mod)#1 word refnum, rdlen, modsize, bytecode, codefix, defofst, defcnt, init, fixup word addr, defaddr, modaddr, modfix, modofst, modend @@ -987,7 +1157,7 @@ def loadmod(mod)#1 moddep = @header.1 defofst = modsize + RELADDR init = 0 - if rdlen > 4 and header:2 == $DA7F // DAVE+1 = magic number :-) + if rdlen > 4 and header:2 == $6502 // DAVE+1 = magic number :-) // // This is an EXTended RELocatable (data+bytecode) module. // @@ -1086,31 +1256,36 @@ def loadmod(mod)#1 // Run through the Re-Location Dictionary. // while ^rld - addr = rld=>1 + modfix - if uword_isge(addr, modaddr) // Skip fixups to header - //if ^rld & $80 // WORD sized fixup. - fixup = *addr - //else // BYTE sized fixup. - // fixup = ^addr - //fin - if ^rld & $10 // EXTERN reference. - fixup = fixup + lookupextern(esd, rld->3) - else // INTERN fixup. - fixup = fixup + modofst - if uword_isge(fixup, bytecode) - // - // Bytecode address - replace with call def directory. - // - fixup = lookupdef(fixup + codefix, deftbl) - fin - fin - //if ^rld & $80 // WORD sized fixup. - *addr = fixup - //else // BYTE sized fixup. - // ^addr = fixup - //fin + rld, addr, fixup = reloc(modfix, modofst, bytecode, rld) + if ^rld + *addr = ^rld & $10 ?? *addr + lookupextern(esd, rld->3) :: lookupdef(fixup + codefix, deftbl) + rld = rld + 4 fin - rld = rld + 4 + //addr = rld=>1 + modfix + //if uword_isge(addr, modaddr) // Skip fixups to header + // if type & $80 // WORD sized fixup. + // fixup = *addr + // else // BYTE sized fixup. + // fixup = ^addr + // fin + // if ^rld & $10 // EXTERN reference. + // fixup = fixup + lookupextern(esd, rld->3) + // else // INTERN fixup. + // fixup = fixup + modofst + // if uword_isge(fixup, bytecode) + // // + // // Bytecode address - replace with call def directory. + // // + // fixup = lookupdef(fixup + codefix, deftbl) + // fin + // fin + // if type & $80 // WORD sized fixup. + // *addr = fixup + // else // BYTE sized fixup. + // ^addr = fixup + // fin + //fin + //rld = rld + 4 loop // // Run through the External/Entry Symbol Directory. @@ -1139,17 +1314,17 @@ def loadmod(mod)#1 // memxcpy(codeseg, bytecode, modsize - (bytecode - modaddr)) fin - // - // Free up end-of-module main memory. - // - releaseheap(bytecode) - else - return -perr + //else + // return -perr fin if lerr return -lerr fin // + // Free up end-of-module main memory. + // + releaseheap(bytecode) + // // Call init routine if it exists. // fixup = 0 @@ -1215,24 +1390,26 @@ def catalog(optpath)#1 fin for i = firstblk to entriesblk type = ^entry - if type <> 0 + if type len = type & $0F ^entry = len prstr(entry) - if type & $F0 == $D0 // Is it a directory? - cout('/') - len = len + 1 - elsif entry->$10 == $FF - cout('-') - len = len + 1 - elsif entry->$10 == $FE - cout('+') - len = len + 1 - fin - for len = 19 - len downto 0 + type = ' ' + when entry->$10 + is $0F // Is it a directory? + type = '/' + break + is $FF // SYSTEM file + type = '-' + break + is $FE // REL file + type = '+' + wend + cout(type) + for len = 18 - len downto 0 cout(' ') next - filecnt = filecnt - 1 + filecnt-- fin entry = entry + entrylen next @@ -1246,26 +1423,26 @@ def catalog(optpath)#1 return 0 end def stripchars(strptr)#1 - while ^strptr and ^(strptr + 1) <> ' ' + while ^strptr and ^(strptr + 1) > ' ' memcpy(strptr + 1, strptr + 2, ^strptr) - ^strptr = ^strptr - 1 + ^strptr-- loop return ^strptr end def stripspaces(strptr)#0 while ^strptr and ^(strptr + ^strptr) <= ' ' - ^strptr = ^strptr - 1 + ^strptr-- loop while ^strptr and ^(strptr + 1) <= ' ' memcpy(strptr + 1, strptr + 2, ^strptr) - ^strptr = ^strptr - 1 + ^strptr-- loop end def striptrail(strptr)#1 byte i for i = 1 to ^strptr - if (strptr)[i] <= ' ' + if ^(strptr + i) <= ' ' ^strptr = i - 1 break fin @@ -1280,7 +1457,7 @@ def parsecmd(strptr)#1 if ^strptr cmd = ^(strptr + 1) memcpy(strptr + 1, strptr + 2, ^strptr) - ^strptr = ^strptr - 1 + ^strptr-- fin stripspaces(strptr) return cmd @@ -1316,7 +1493,7 @@ init_cons // // Print PLASMA version // -prstr("PLASMA "); prbyte(version.1); cout('.'); prbyte(version.0); crout +prstr("PLASMA Pre3 "); prbyte(version.1); cout('.'); prbyte(version.0); crout // // Init 2K symbol table. // @@ -1365,6 +1542,14 @@ while 1 is 'P' setpfx(cmdptr) break + is '/' + repeat + prefix-- + until prefix[prefix] == '/' + if prefix > 1 + setpfx(@prefix) + fin + break is 'S' setpfx(cmdptr) strcat(getpfx(@sysmods), "SYS/")) @@ -1373,7 +1558,9 @@ while 1 volumes break is '+' + saveX execmod(striptrail(cmdptr)) + restoreX write(refcons, @textmode, 3) break otherwise From 222e34e229e97a1aff85ae3e912f56bbfc45e08b Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 1 Feb 2018 18:49:20 -0800 Subject: [PATCH 14/40] Give 64K machines better ENTER/LEAVE --- src/vmsrc/plvm02.s | 51 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index 0c8d46f..160f3e2 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -135,6 +135,21 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE BEQ + JSR C02OPS ;* +;* SET 64K ENTER/LEAVE (NO NEED FOR STRING POOL) +;* ++ LDA MACHID + AND #$30 + CMP #$30 + BEQ + + LDA #ENTER64 + STA OPTBL+$59 + LDA #LEAVE64 + STA OPTBL+$5B +;* ;* SAVE DEFAULT COMMAND INTERPRETER PATH IN LC ;* + JSR PRODOS ; GET PREFIX @@ -183,7 +198,7 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E + !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E ;* @@ -390,7 +405,7 @@ OPXTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,IBRNCH,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E + !WORD BRNCH,IBRNCH,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB; 50 52 54 56 58 5A 5C 5E !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E ;* @@ -1449,6 +1464,29 @@ ICALX LDA ESTKL,X ;* ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* +ENTER64 INY + LDA (IP),Y + EOR #$FF + SEC + ADC IFPL + STA IFPL + BCS + + DEC IFPH ++ INY + LDA (IP),Y + BEQ + + ASL + TAY +- LDA ESTKH,X + DEY + STA (IFP),Y + LDA ESTKL,X + INX + DEY + STA (IFP),Y + BNE - ++ LDY #$03 + JMP FETCHOP ENTER LDA IFPH PHA ; SAVE ON STACK FOR LEAVE LDA IFPL @@ -1499,6 +1537,15 @@ RETX STA ALTRDOFF PHA PLP RTS +LEAVE64 INY ;+INC_IP + LDA (IP),Y + CLC + ADC IFPL + STA IFPL + BCS + + RTS ++ INC IFPH + RTS LEAVE INY ;+INC_IP LDA (IP),Y CLC From 62672644679cb96a401c9ba28af673f9f9b2b023 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 2 Feb 2018 16:41:10 -0800 Subject: [PATCH 15/40] Pass yieldtime into GetKey --- src/inc/sndseq.plh | 2 +- src/libsrc/sndseq.pla | 13 +++++-------- src/samplesrc/playseq.pla | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/inc/sndseq.plh b/src/inc/sndseq.plh index cdc1f68..3110a0e 100644 --- a/src/inc/sndseq.plh +++ b/src/inc/sndseq.plh @@ -1,4 +1,4 @@ import sndseq predef spkrTone(pitch, duration)#0, spkrPWM(sample, speed, len)#0 - predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(backgroundProc)#1 + predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield,backgroundProc)#1 end diff --git a/src/libsrc/sndseq.pla b/src/libsrc/sndseq.pla index 1a60976..2fb8c72 100755 --- a/src/libsrc/sndseq.pla +++ b/src/libsrc/sndseq.pla @@ -763,17 +763,14 @@ export def musicStop#0 musicSequence = @noSequence end // -// Get a keystroke and convert it to upper case +// Play until keystroke // -export def musicGetKey(backgroundProc)#1 - byte key - +export def musicGetKey(yield, backgroundProc)#1 while ^$C000 < 128 - musicSequence($08, backgroundProc)#0 // Call background proc every half second + musicSequence(yield, backgroundProc)#0 // Call background proc every half second loop - key = ^$C000 & $7F ^$C010 - return key + return ^$C000 end done @@ -798,7 +795,7 @@ musicStop() The getUpperKey routine will call a dummy sequence routine that will keep the correct timing for any background processing -getKey() +musicGetKey(yieldtime, yieldproc) Wait for a keypress and return the character While waiting for the keypress, the track sequence will be played though either the MockingBoard (if present) or the internal speaker. Optionally, diff --git a/src/samplesrc/playseq.pla b/src/samplesrc/playseq.pla index 5f502be..f3af6c6 100644 --- a/src/samplesrc/playseq.pla +++ b/src/samplesrc/playseq.pla @@ -22,7 +22,7 @@ if ^arg fileio:read(ref, heapmark(), heapavail()) fileio:close(ref) musicPlay(heapmark(), TRUE) - musicGetKey(@backgroundProc) + musicGetKey(8, @backgroundProc) // Yield every 8/16 second musicStop else puts("File not found.\n") From 9331976be3b9cdc6a7f05b258ab8642574f2dea4 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 2 Feb 2018 17:11:52 -0800 Subject: [PATCH 16/40] Clean up old images --- HTTPD.PO | Bin 143360 -> 0 bytes ROGUE.PO | Bin 143360 -> 0 bytes RPNCALC.PO | Bin 143360 -> 0 bytes SDFAT.PO | Bin 143360 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 HTTPD.PO delete mode 100644 ROGUE.PO delete mode 100644 RPNCALC.PO delete mode 100755 SDFAT.PO diff --git a/HTTPD.PO b/HTTPD.PO deleted file mode 100644 index ed028872f670797b4a8e352f3d1c2cef952b8c48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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

kSo23dH$^6}5Ii9j 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

m3@9t0bZr%x?f%N9RpKK!u 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

th51wgwo!r0yy9oU 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 N1C9n94gA$L@c&(5%ntwn diff --git a/RPNCALC.PO b/RPNCALC.PO deleted file mode 100644 index ea591f57d7510192c7279bd386ff5424f1df06c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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 HV&MM*0aYA} diff --git a/SDFAT.PO b/SDFAT.PO deleted file mode 100755 index 8118fbb517ea1cba85e920285f32a679cedfc283..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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 nER{p~8kA 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 From 39385d79a487b1a9f56f3e314ce911ac5f34d814 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 2 Feb 2018 21:06:17 -0800 Subject: [PATCH 17/40] Add more files to release --- src/mkrel | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mkrel b/src/mkrel index a4064f4..1cbf292 100755 --- a/src/mkrel +++ b/src/mkrel @@ -1,6 +1,7 @@ cp CMD#061000 prodos/CMD.BIN cp PLASMA.SYSTEM#FF2000 prodos/PLASMA.SYSTEM.SYS cp PLASMA16.SYSTEM#FF2000 prodos/PLASMA16.SYSTEM.SYS +cp SOS.INTERP#050000 prodos/SOS.INTERP.\$05 cp ../doc/Editor.md prodos/EDITOR.README.TXT rm -rf prodos/sys @@ -74,6 +75,8 @@ cp samplesrc/test.pla prodos/bld/TEST.PLA.TXT cp samplesrc/testlib.pla prodos/bld/TESTLIB.PLA.TXT cp samplesrc/playseq.pla prodos/bld/PLAYSEQ.PLA.TXT cp samplesrc/rpncalc.pla prodos/bld/RPNCALC.PLA.TXT +cp samplesrc/httpd.pla prodos/bld/HTTPD.PLA.TXT +cp samplesrc/fatcat.pla prodos/bld/FATCAT.PLA.TXT mkdir prodos/bld/inc cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT From d59a54d8fd83fdf78bbc4bffa34f9399e05821e2 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 3 Feb 2018 09:26:27 -0800 Subject: [PATCH 18/40] Extend Console I/O so Rogue I/O disappears --- src/inc/conio.plh | 3 + src/inc/sndseq.plh | 3 +- src/libsrc/conio.pla | 76 +++++++++++++++++++++- src/makefile | 7 +-- src/mkrel | 4 +- src/samplesrc/rogue.combat.pla | 19 +++--- src/samplesrc/rogue.io.pla | 111 --------------------------------- src/samplesrc/rogue.map.pla | 33 ++++++++-- src/samplesrc/rogue.pla | 39 ++++++------ 9 files changed, 136 insertions(+), 159 deletions(-) delete mode 100644 src/samplesrc/rogue.io.pla diff --git a/src/inc/conio.plh b/src/inc/conio.plh index 58c5590..129ecba 100644 --- a/src/inc/conio.plh +++ b/src/inc/conio.plh @@ -4,6 +4,7 @@ import conio const FLASH = $7F struc t_conio word keypressed + word getkey word home word gotoxy word viewport @@ -12,5 +13,7 @@ import conio word grmode word grcolor word grplot + word tone + word rnd end end diff --git a/src/inc/sndseq.plh b/src/inc/sndseq.plh index 3110a0e..dbde81a 100644 --- a/src/inc/sndseq.plh +++ b/src/inc/sndseq.plh @@ -1,4 +1,5 @@ import sndseq + word musicSequence // musicSequence(yield, backgroundProc)#0 predef spkrTone(pitch, duration)#0, spkrPWM(sample, speed, len)#0 - predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield,backgroundProc)#1 + predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield, backgroundProc)#1 end diff --git a/src/libsrc/conio.pla b/src/libsrc/conio.pla index fa4769e..6cd28bf 100644 --- a/src/libsrc/conio.pla +++ b/src/libsrc/conio.pla @@ -5,6 +5,12 @@ include "inc/cmdsys.plh" const FULLMODE = 0 const MIXMODE = 1 // +// Apple II ZP locations. +// +const a2rndnum = $4E // ZP location of RND +const a2rndl = $4E +const a2rndh = $4F +// // Apple II hardware constants. // const speaker = $C030 @@ -23,10 +29,15 @@ const hgr2 = $4000 const page1 = 0 const page2 = 1 // -// External interface +// Apple III hardware constants. +// +const ENV_REG = $FFDF +// +// External interface. // struc t_conio word keypressed + word getkey word home word gotoxy word viewport @@ -35,12 +46,14 @@ struc t_conio word grmode word grcolor word grplot + word tone + word rnd end // // Predefined functions. // predef a2keypressed,a2home,a2gotoxy(x,y),a2viewport(left, top, width, height),a2texttype(type) -predef a2textmode(cols),a2grmode(mix),a2grcolor(color),a2grplot(x,y) +predef a2textmode(cols),a2grmode(mix),a2grcolor(color),a2grplot(x,y),a2tone(duration, delay),a2rnd // // Exported function table. // @@ -49,6 +62,7 @@ word conio[] // Function pointers. // word = @a2keypressed +word = @getc word = @a2home word = @a2gotoxy word = @a2viewport @@ -57,6 +71,8 @@ word = @a2textmode word = @a2grmode word = @a2grcolor word = @a2grplot +word = @a2tone +word = @a2rnd // // Screen row address arrays. // @@ -79,6 +95,10 @@ byte textbwmode[] = 2, 16, 0 byte textclrmode[] = 2, 16, 1 byte grcharset[] = 1, 0, $7F, $7F, $7F, $7F, $00, $00, $00, $00 // +// Random number for Apple 1 and III. +// +word randnum = 12345 +// // Native routines. // asm equates @@ -176,6 +196,15 @@ end def a1grmode(mix) return 0 // not supported end +def a1tone(duration, delay) + byte i + + while duration + for i = delay downto 0; next + duration-- + loop + return 0 +end // // Apple II routines. // @@ -223,6 +252,20 @@ def a2grmode(mix) a2home return a2grscrn(@txt1scrn) // point to lo-res screen end +def a2tone(duration, delay) + byte i + + while duration + ^speaker // toggle speaker + for i = delay downto 0; next + duration-- + loop + return 0 +end +def a2rnd + *a2rndnum = (*a2rndnum << 1) + *a2rndnum + 123 + return *a2rndnum & $7FFF +end // // Apple III routines. // @@ -314,27 +357,56 @@ def a3grmode(mix) next return a2grscrn(@txt2scrn) // point to color screen end +def a3tone(duration, pitch) + byte env + + env = ^ENV_REG + ^ENV_REG = env | $C0 + a2tone(duration, pitch) + ^ENV_REG = env + return 0 +end +// +// Apple 1 and III combined routines. +// +def a13getkey + while not conio:keypressed() + randnum = randnum + 123 + loop + return getc() +end +def a13rnd + randnum = (randnum << 1) + randnum + 123 + return randnum & $7FFF +end + // // Machine specific initialization. // when MACHID & MACHID_MODEL is MACHID_I conio:keypressed = @a1keypressed + conio:getkey = @a13getkey conio:home = @a1home conio:gotoxy = @a1gotoxy conio:viewport = @a1viewport conio:texttype = @a1texttype conio:textmode = @a1textmode conio:grmode = @a1grmode + conio:tone = @a1tone + conio:rnd = @a13rnd break is MACHID_III conio:keypressed = @a3keypressed + conio:getkey = @a13getkey conio:home = @a3home conio:gotoxy = @a3gotoxy conio:viewport = @a3viewport conio:texttype = @a3texttype conio:textmode = @a3textmode conio:grmode = @a3grmode + conio:tone = @a3tone + conio:rnd = @a13rnd break //otherwise // MACHID_II wend diff --git a/src/makefile b/src/makefile index fc46ea8..3cfe7b4 100755 --- a/src/makefile +++ b/src/makefile @@ -38,7 +38,6 @@ DGR = DGR\#FE1000 TONE = TONE\#FE1000 PORTIO = PORTIO\#FE1000 ROGUE = ROGUE\#FE1000 -ROGUEIO = ROGUEIO\#FE1000 ROGUEMAP= ROGUEMAP\#FE1000 ROGUECOMBAT= ROGUECOMBAT\#FE1000 HELLO = HELLO\#FE1000 @@ -73,7 +72,7 @@ TXTTYPE = .TXT #SYSTYPE = \#FF2000 #TXTTYPE = \#040000 -all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(ROGUEIO) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) +all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) clean: -rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) @@ -285,10 +284,6 @@ $(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM) ./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a -$(ROGUEIO): samplesrc/rogue.io.pla $(PLVM02) $(PLASM) - ./$(PLASM) -AMOW < samplesrc/rogue.io.pla > samplesrc/rogue.io.a - acme --setpc 4094 -o $(ROGUEIO) samplesrc/rogue.io.a - $(ROGUECOMBAT): samplesrc/rogue.combat.pla $(PLVM02) $(PLASM) ./$(PLASM) -AMOW < samplesrc/rogue.combat.pla > samplesrc/rogue.combat.a acme --setpc 4094 -o $(ROGUECOMBAT) samplesrc/rogue.combat.a diff --git a/src/mkrel b/src/mkrel index 1cbf292..e8be6fd 100755 --- a/src/mkrel +++ b/src/mkrel @@ -38,7 +38,6 @@ cp ROD#FE1000 prodos/demos/ROD.REL mkdir prodos/demos/rogue cp ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL cp ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.REL -cp ROGUEIO#FE1000 prodos/demos/rogue/ROGUEIO.REL cp ROGUEMAP#FE1000 prodos/demos/rogue/ROGUEMAP.REL cp samplesrc/LEVEL0#040000 prodos/demos/rogue/LEVEL0.TXT cp samplesrc/LEVEL1#040000 prodos/demos/rogue/LEVEL1.TXT @@ -77,6 +76,9 @@ cp samplesrc/playseq.pla prodos/bld/PLAYSEQ.PLA.TXT cp samplesrc/rpncalc.pla prodos/bld/RPNCALC.PLA.TXT cp samplesrc/httpd.pla prodos/bld/HTTPD.PLA.TXT cp samplesrc/fatcat.pla prodos/bld/FATCAT.PLA.TXT +cp samplesrc/rogue.pla prodos/bld/ROGUE.PLA.TXT +cp samplesrc/rogue.map.pla prodos/bld/ROGUE.MAP.PLA.TXT +cp samplesrc/rogue.combat.pla prodos/bld/ROGUE.COMBAT.PLA.TXT mkdir prodos/bld/inc cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT diff --git a/src/samplesrc/rogue.combat.pla b/src/samplesrc/rogue.combat.pla index 3809663..1d4f790 100644 --- a/src/samplesrc/rogue.combat.pla +++ b/src/samplesrc/rogue.combat.pla @@ -1,9 +1,6 @@ include "inc/cmdsys.plh" include "inc/conio.plh" -import rogueio - word rnd, getkb, tone -end import roguemap predef moveplayer end @@ -129,10 +126,10 @@ export word entities = 0 // def win#0 - tone(30, 15) - tone(5, 15) - tone(5, 15) - tone(30, 5) + conio:tone(30, 15) + conio:tone(5, 15) + conio:tone(5, 15) + conio:tone(30, 5) end export def fight(player, enemy) @@ -161,18 +158,18 @@ export def fight(player, enemy) puts(ascii_entity[enemy->kind] + e_atck * 11) next conio:gotoxy(12, 8); puts("F)ight or R)un?") - if toupper(getkb()) == 'R' + if toupper(conio:getkey()) == 'R' return 1 else // // Turn player in random direction // - player->angle = rnd() & 7 + player->angle = conio:rnd() & 7 // // Calculate attack (with a little random variation) // - p_atck = player->skill + player->energy / 10 - enemy->power / 25 + (rnd() & 7) - e_atck = enemy->power - player->skill / 5 - player->energy / 20 + (rnd() & 7) + p_atck = player->skill + player->energy / 10 - enemy->power / 25 + (conio:rnd() & 7) + e_atck = enemy->power - player->skill / 5 - player->energy / 20 + (conio:rnd() & 7) if enemy->life > p_atck enemy->life = enemy->life - p_atck else diff --git a/src/samplesrc/rogue.io.pla b/src/samplesrc/rogue.io.pla deleted file mode 100644 index 31b349a..0000000 --- a/src/samplesrc/rogue.io.pla +++ /dev/null @@ -1,111 +0,0 @@ -include "inc/cmdsys.plh" -include "inc/conio.plh" - -byte[] initstr -byte = " ( )\n" -byte = " )\\ ) ( /( (\n" -byte = "(()/( )\\()) )\\ ) ( (\n" -byte = " /(_))((_)\\ (()/( )\\ )\\\n" -byte = "(_)) ((_) /(_))_ _ ((_)((_)\n" -byte = "| _ \\ / _ \\(_)) __|| | | || __|\n" -byte = "| / | (_) | | (_ || |_| || _|\n" -byte = "|_|_\\ \\___/ \\___| \\___/ |___|\n" -byte = "\n" -byte = " By Resman\n" -byte = " Artwork by Seth Sternberger\n" -byte = "" -word titlestr = @initstr - -// -// Machine specific routines -// - -export word rnd, getkb, tone - -const ENV_REG = $FFDF - -const SPEAKER = $C030 - -const a2rndnum = $4E // ZP location of RND -const a2rndl = $4E -const a2rndh = $4F - -word a3rndnum = 12345 - -def a3rnd - a3rndnum = (a3rndnum << 1) + a3rndnum + 123 - return *a3rndnum & $7FFF -end - -def a2rnd - *a2rndnum = (*a2rndnum << 1) + *a2rndnum + 123 - return *a2rndnum & $7FFF -end - -def a2getkb - return getc() -end - -def a2tone(duration, delay) - byte i - - while duration - ^SPEAKER - for i = 0 to delay - next - duration-- - loop - return 0 -end - -def a3tone(duration, pitch) - byte env - - env = ^ENV_REG - ^ENV_REG = env | $C0 - a2tone(duration, pitch) - ^ENV_REG = env - return 0 -end - -// -// Apple /// console routines -// - -def a3getkb - while not conio:keypressed() - a3rndnum = a3rndnum + 123 - loop - return getc() -end - -// -// Set machine specific routines -// - -when MACHID & $C8 - is $08 // Apple 1 - puts("APPLE 1 NOT SUPPORTED.") - return -1 - is $C0 // Apple /// - rnd = @a3rnd - getkb = @a3getkb - tone = @a3tone - break - otherwise // Apple ][ - rnd = @a2rnd - getkb = @a2getkb - tone = @a2tone -wend - -// -// Print title page -// - -conio:home() -while ^titlestr - puts(titlestr) - titlestr = titlestr + ^titlestr + 1 -loop - -done diff --git a/src/samplesrc/rogue.map.pla b/src/samplesrc/rogue.map.pla index 0f33e2a..b068fe1 100644 --- a/src/samplesrc/rogue.map.pla +++ b/src/samplesrc/rogue.map.pla @@ -5,13 +5,24 @@ include "inc/cmdsys.plh" include "inc/conio.plh" include "inc/fileio.plh" -import rogueio - const O_READ = 1 - const O_WRITE = 2 - const O_READ_WRITE = 3 +// +// Title page +// - word rnd, getkb, tone -end +byte[] initstr +byte = " ( )\n" +byte = " )\\ ) ( /( (\n" +byte = "(()/( )\\()) )\\ ) ( (\n" +byte = " /(_))((_)\\ (()/( )\\ )\\\n" +byte = "(_)) ((_) /(_))_ _ ((_)((_)\n" +byte = "| _ \\ / _ \\(_)) __|| | | || __|\n" +byte = "| / | (_) | | (_ || |_| || _|\n" +byte = "|_|_\\ \\___/ \\___| \\___/ |___|\n" +byte = "\n" +byte = " By Resman\n" +byte = " Artwork by Seth Sternberger\n" +byte = "" +word titlestr = @initstr // // Octant beam parameters @@ -760,4 +771,14 @@ export def drawvisentity(xofst, yofst, tile)#0 fin end +// +// Print title page +// + +conio:home() +while ^titlestr + puts(titlestr) + titlestr = titlestr + ^titlestr + 1 +loop + done diff --git a/src/samplesrc/rogue.pla b/src/samplesrc/rogue.pla index 7b2e58d..d74503b 100755 --- a/src/samplesrc/rogue.pla +++ b/src/samplesrc/rogue.pla @@ -41,10 +41,6 @@ import roguecombat word entity, entities end -import rogueio - word rnd, getkb, tone -end - const maxlight = 10 const maxview = 19 @@ -54,6 +50,7 @@ byte vplayer = '^', '\\', '>', '/', 'v', '\\', '<', '/' byte totaldarkness = 0 byte level = 0 word free_entities + // // Power-ups // @@ -157,42 +154,42 @@ end // def ouch#0 - tone(128,5) + conio:tone(128,5) end def gotit#0 - tone(10,8) - tone(80,2) + conio:tone(10,8) + conio:tone(80,2) end def fall#0 byte i for i = 0 to 10 - tone(50, i) + conio:tone(50, i) next end def drown#0 word i - tone(10,20) - tone(10,1) + conio:tone(10,20) + conio:tone(10,1) for i = 0 to 1000 next - tone(10,25) - tone(10,2) + conio:tone(10,25) + conio:tone(10,2) for i = 0 to 1000 next - tone(10,30) - tone(10,3) + conio:tone(10,30) + conio:tone(10,3) end def groan#0 byte i for i = 0 to 5 - tone(5, 40 + i) + conio:tone(5, 40 + i) next end @@ -463,10 +460,10 @@ def play return FALSE fin conio:gotoxy(xcentr, ycentr) - when toupper(getkb()) + when toupper(conio:getkey()) is 'I' if totaldarkness - player.angle = rnd() & 7 + player.angle = conio:rnd() & 7 else player.angle = 0 fin @@ -474,7 +471,7 @@ def play break is 'J' if totaldarkness - player.angle = rnd() & 7 + player.angle = conio:rnd() & 7 else player.angle = 6 fin @@ -482,7 +479,7 @@ def play break is 'K' if totaldarkness - player.angle = rnd() & 7 + player.angle = conio:rnd() & 7 else player.angle = 2 fin @@ -490,7 +487,7 @@ def play break is 'M' if totaldarkness - player.angle = rnd() & 7 + player.angle = conio:rnd() & 7 else player.angle = 4 fin @@ -601,7 +598,7 @@ def play clearstatus conio:gotoxy(0, statusline) puts(@quitstr) - if toupper(getkb()) == 'Y' + if toupper(conio:getkey()) == 'Y' player.health = 0 return FALSE fin From 384c6e8a18a80a6c0a65ab7edc423014a522b0c5 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 3 Feb 2018 20:20:21 -0800 Subject: [PATCH 19/40] Lots of Apple /// progress --- src/libsrc/conio.pla | 31 +++++---- src/libsrc/fileio.pla | 39 +++++++---- src/libsrc/longjmp.pla | 12 ++++ src/toolsrc/ed.pla | 72 +++++++++++++++++--- src/vmsrc/a1cmd.pla | 7 +- src/vmsrc/cmd.pla | 18 ++--- src/vmsrc/plvm03.s | 29 +++++--- src/vmsrc/soscmd.pla | 149 ++++++++++++++--------------------------- 8 files changed, 195 insertions(+), 162 deletions(-) diff --git a/src/libsrc/conio.pla b/src/libsrc/conio.pla index 6cd28bf..3cff845 100644 --- a/src/libsrc/conio.pla +++ b/src/libsrc/conio.pla @@ -352,8 +352,8 @@ def a3grmode(mix) dev_control(cmdsys.devcons, 17, @grcharset) a3viewport(0, 20, 40, 4) for i = 0 to mix - memset(txt1scrn[i], 40, $0000) // text screen - memset(txt2scrn[i], 40, $0000) // color screen + memset(txt1scrn[i], $0000, 40) // text screen + memset(txt2scrn[i], $0000, 40) // color screen next return a2grscrn(@txt2scrn) // point to color screen end @@ -379,23 +379,10 @@ def a13rnd randnum = (randnum << 1) + randnum + 123 return randnum & $7FFF end - // // Machine specific initialization. // when MACHID & MACHID_MODEL - is MACHID_I - conio:keypressed = @a1keypressed - conio:getkey = @a13getkey - conio:home = @a1home - conio:gotoxy = @a1gotoxy - conio:viewport = @a1viewport - conio:texttype = @a1texttype - conio:textmode = @a1textmode - conio:grmode = @a1grmode - conio:tone = @a1tone - conio:rnd = @a13rnd - break is MACHID_III conio:keypressed = @a3keypressed conio:getkey = @a13getkey @@ -408,6 +395,18 @@ when MACHID & MACHID_MODEL conio:tone = @a3tone conio:rnd = @a13rnd break - //otherwise // MACHID_II + is MACHID_I + conio:keypressed = @a1keypressed + conio:getkey = @a13getkey + conio:home = @a1home + conio:gotoxy = @a1gotoxy + conio:viewport = @a1viewport + conio:texttype = @a1texttype + conio:textmode = @a1textmode + conio:grmode = @a1grmode + conio:tone = @a1tone + conio:rnd = @a13rnd + break + otherwise // MACHID_II puts("Found MACHID_MODEL = $"); putb(MACHID & MACHID_MODEL); putln wend done diff --git a/src/libsrc/fileio.pla b/src/libsrc/fileio.pla index 0c35c7f..b96ee59 100644 --- a/src/libsrc/fileio.pla +++ b/src/libsrc/fileio.pla @@ -40,14 +40,14 @@ struc t_fileio end predef a2getpfx(path), a23setpfx(path), a2getfileinfo(path, fileinfo), a23geteof(refnum), a2openbuf(path, iobuf), a2open(path), a23close(refnum) predef a23read(refnum, buf, len), a2write(refnum, buf, len), a2create(path, type, aux), a23destroy(path) -predef a23newline(refnum, emask, nlchar), a2readblock(unit, buf, block), a2writeblock(unit, buf, block) +predef a2newline(refnum, emask, nlchar), a2readblock(unit, buf, block), a2writeblock(unit, buf, block) // // Exported function table. // word fileio[] word = @a2getpfx, @a23setpfx, @a2getfileinfo, @a23geteof, @a2openbuf, @a2open, @a23close word = @a23read, @a2write, @a2create, @a23destroy -word = @a23newline, @a2readblock, @a2writeblock +word = @a2newline, @a2readblock, @a2writeblock // // SOS/ProDOS error code // @@ -263,7 +263,7 @@ end def a1newline(refnum, emask, nlchar) return perr end -def a23newline(refnum, emask, nlchar) +def a2newline(refnum, emask, nlchar) byte params[4] params.0 = 3 @@ -273,6 +273,16 @@ def a23newline(refnum, emask, nlchar) perr = syscall($C9, @params) return perr end +def a3newline(refnum, emask, nlchar) + byte params[4] + + params.0 = 3 + params.1 = refnum + params.2 = emask ?? $FF :: $00 + params.3 = nlchar + perr = syscall($C9, @params) + return perr +end def a13readblock(unit, buf, block) perr = $27 // IOERR return perr @@ -304,8 +314,18 @@ end // // Machine specific initialization. // -when MACHID & $C8 - is $08 // Apple 1 +when MACHID & MACHID_MODEL + is MACHID_III + fileio:getpfx = @a3getpfx + fileio:getfileinfo = @a3getfileinfo + fileio:open = @a3open + fileio:write = @a3write + fileio:create = @a3create + fileio:newline = @a3newline + fileio:readblock = @a13readblock + fileio:writeblock = @a13writeblock + break + is MACHID_I fileio:getpfx = @a1getpfx fileio:setpfx = @a1setpfx fileio:getfileinfo = @a1getfileinfo @@ -320,15 +340,6 @@ when MACHID & $C8 fileio:readblock = @a13readblock fileio:writeblock = @a13writeblock break - is $C0 // Apple /// - fileio:getpfx = @a3getpfx - fileio:getfileinfo = @a3getfileinfo - fileio:open = @a3open - fileio:write = @a3write - fileio:create = @a3create - fileio:readblock = @a13readblock - fileio:writeblock = @a13writeblock - break otherwise // Apple ][ wend done diff --git a/src/libsrc/longjmp.pla b/src/libsrc/longjmp.pla index 9a4df23..78c9128 100644 --- a/src/libsrc/longjmp.pla +++ b/src/libsrc/longjmp.pla @@ -1,5 +1,12 @@ asm incs !SOURCE "vmsrc/plvmzp.inc" +XPAGE = $1600 +NEXTOP = $F0 +FETCHOP = NEXTOP+1 +IP = FETCHOP+1 +IPL = IP +IPH = IPL+1 +IPX = XPAGE+IPH end // // Save environment (PLASMA ZP and stack) for below and return 0 @@ -13,6 +20,8 @@ export asm except(env) TSX STX TMPL LDY TMPL + LDA IPX ; APPLE 3-ISM + STA TMPH - LDA $0100,Y STA (SRC),Y INY @@ -51,6 +60,8 @@ export asm throw(env, retval) INX BNE - DEC DST+1 + LDA TMPH ; APPLE 3-ISM + STA IPX LDX TMPL TXS LDY TMPL @@ -65,3 +76,4 @@ export asm throw(env, retval) STA ESTKH,X RTS end +done diff --git a/src/toolsrc/ed.pla b/src/toolsrc/ed.pla index c745d4c..ff17804 100755 --- a/src/toolsrc/ed.pla +++ b/src/toolsrc/ed.pla @@ -84,6 +84,8 @@ word strplsize = MAXSTRPLSIZE word strpool, strplmapsize, strlinbuf, strpoolmap byte cursx, cursy, scrnleft, curscol, underchr, curschr word keyin, cursrow, scrntop, cursptr +byte a3echo = $80 +byte a3noecho = $00 // // Predeclared functions // @@ -316,8 +318,8 @@ end def readtxt(filename)#0 byte txtbuf[81], refnum, i, j - if refnum refnum = fileio:open(filename) + if refnum fileio:newline(refnum, $7F, $0D) repeat txtbuf = fileio:read(refnum, @txtbuf + 1, MAXLNLEN) @@ -370,7 +372,11 @@ end // Screen routines // def clrscrn#0 - call($FC58, 0, 0, 0, 0) + if MACHID == $F2 // Apple 3 + putc(28) + else + call($FC58, 0, 0, 0, 0) + fin end def drawrow(row, ofst, strptr)#0 byte numchars @@ -562,6 +568,34 @@ end // // Keyboard routines // +def dev_status(devnum, code, list) + byte params[5] + + params.0 = 3 + params.1 = devnum + params.2 = code + params:3 = list + return syscall($82, @params) +end +def dev_control(devnum, code, list)#1 + byte params[5] + + params.0 = 3 + params.1 = devnum + params.2 = code + params:3 = list + perr = syscall($83, @params) + return perr +end +def keyin3 + byte count, key + repeat + cursflash + dev_status(cmdsys.devcons, 5, @count) + until count + key = getc + return key | $80 +end def keyin2e byte key repeat @@ -603,7 +637,7 @@ def keyin2 elsif key == keyctrlp key = $DF // _ elsif key == keyctrlb - key = $DC // \ + key = $DC // \ elsif key == keyarrowleft if ^pushbttn3 < 128 key = $FF @@ -623,6 +657,19 @@ def keyin2 fin return key end +def setkeyin#0 + when MACHID & MACHID_MODEL + is MACHID_IIE + is MACHID_IIC + keyin = @keyin2e + break + is MACHID_III + keyin = @keyin3 + break + otherwise // ][ or ][+ + keyin = @keyin2 + wend +end def tabkeyin return curscol < MAXLNLEN and curscol & $01 ?? keyspace :: 0 end @@ -827,6 +874,9 @@ def editline(key) return key end def editmode#0 + if MACHID == $F2 // Apple 3 + dev_control(cmdsys.devcons, 11, @a3noecho) + fin repeat when editline(keyin()) is keyarrowup @@ -877,7 +927,7 @@ def editmode#0 is keyctrli keyin = @tabkeyin editline(keyspace) - keyin = !(MACHID & $80) ?? @keyin2 :: @keyin2e + setkeyin break is keyctrlb if flags & insmode @@ -897,9 +947,15 @@ def editmode#0 redraw break is keyescape + if MACHID == $F2 // Apple 3 + dev_control(cmdsys.devcons, 11, @a3echo) + fin cursoff cmdmode if not exit + if MACHID == $F2 // Apple 3 + dev_control(cmdsys.devcons, 11, @a3noecho) + fin redraw fin break @@ -1060,7 +1116,7 @@ def cmdmode#0 wend if perr puts("ERROR: $") - call($FDDA, perr, 0, 0, 0) + putb(perr) else puts("OK") fin @@ -1070,11 +1126,9 @@ end // // Init editor // -if !(MACHID & $80) +setkeyin +if not (MACHID & $80) // ][ or ][+ flags = uppercase | shiftlock - keyin = @keyin2 -else - keyin = @keyin2e fin inittxtbuf arg = argNext(argFirst) diff --git a/src/vmsrc/a1cmd.pla b/src/vmsrc/a1cmd.pla index bd9a226..bae391d 100755 --- a/src/vmsrc/a1cmd.pla +++ b/src/vmsrc/a1cmd.pla @@ -1,6 +1,3 @@ -const FALSE = 0 -const TRUE = not FALSE - const RELADDR = $1000 const inbuff = $200 const freemem = $0006 @@ -803,7 +800,7 @@ def loadmod(mod)#1 moddep = @header.1 defofst = modsize + RELADDR init = 0 - if rdlen > 4 and heap=>2 == $DA7F // DAVE+1 = magic number :-) + if rdlen > 4 and heap=>2 == $6502 // magic number // // This is an EXTended RELocatable (data+bytecode) module. // @@ -1045,7 +1042,7 @@ fin // // Handle commands. // -while TRUE +while 1 if ^cmdptr when toupper(parsecmd(cmdptr)) is 'Q' diff --git a/src/vmsrc/cmd.pla b/src/vmsrc/cmd.pla index 01b715a..db0195d 100755 --- a/src/vmsrc/cmd.pla +++ b/src/vmsrc/cmd.pla @@ -1058,7 +1058,7 @@ def loadmod(mod)#1 moddep = @header.1 defofst = modsize + RELADDR init = 0 - if rdlen > 4 and header:2 == $6502 // DAVE+1 = magic number :-) + if rdlen > 4 and header:2 == $6502 // magic number // // This is an EXTended RELocatable (data+bytecode) module. // @@ -1271,24 +1271,19 @@ def volumes()#0 strbuf = strbuf + 16 next end -def catalog(optpath)#1 - byte path[64] +def catalog(path)#0 byte refnum byte firstblk byte entrylen, entriesblk byte i, type, len word entry, filecnt - if ^optpath - strcpy(@path, optpath) - else - pfxop(@path, GET_PFX) - prstr(@path) - crout() + if !^path + path = @prefix fin - refnum = open(@path) + refnum = open(path) if perr - return perr + return fin firstblk = 1 repeat @@ -1332,7 +1327,6 @@ def catalog(optpath)#1 until !filecnt close(refnum) crout() - return 0 end def stripchars(strptr)#1 while ^strptr and ^(strptr + 1) > ' ' diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 8e7ca9a..f1ccde9 100755 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -27,6 +27,7 @@ DROPX = XPAGE+DROP IFPX = XPAGE+IFPH PPX = XPAGE+PPH IPX = XPAGE+IPH +JMPTMPX = XPAGE+JMPTMP TMPX = XPAGE+TMPH SRCX = XPAGE+SRCH DSTX = XPAGE+DSTH @@ -59,6 +60,10 @@ SEGSTART = $A000 STA DROPX,Y DEY BPL - + LDX #$4C ; SET JMPTMP OPCODE + STX JMPTMP +; STA JMPTMPX +; STA JMPTMPX+1 STA TMPX ; CLEAR ALL EXTENDED POINTERS STA SRCX STA DSTX @@ -70,6 +75,8 @@ SEGSTART = $A000 LDA #>SEGSTART STA PPH STA IFPH + LDX #$FF ; INIT STACK POINTER + TXS LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX JMP SOSCMD ;PRHEX PHA @@ -874,6 +881,17 @@ ISLT LDA ESTKL+1,X + BMI ISFLS BPL ISTRU ;* +;* NORMALIZE IP+Y BEFORE CALLING NEXTOP +;* +FIXNEXT TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP NEXTOP +;* ;* BRANCHES ;* BRTRU INX @@ -884,14 +902,6 @@ NOBRNCH INY ;+INC_IP INY ;+INC_IP BMI FIXNEXT JMP NEXTOP -FIXNEXT TYA - LDY #$00 - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ JMP NEXTOP BRFLS INX LDA ESTKH-1,X ORA ESTKL-1,X @@ -904,6 +914,8 @@ BRNCH TYA ; FLATTEN IP TAY ADC IPH STA TMPH ; ADD BRANCH OFFSET + LDA IPX ; COPY XBYTE FROM IP + STA TMPX LDA (TMP),Y ;CLC ; BETTER NOT CARRY OUT OF IP+Y ADC TMPL @@ -913,6 +925,7 @@ BRNCH TYA ; FLATTEN IP ADC TMPH STA IPH DEY + STY TMPX ; CLEAR TMPX JMP FETCHOP BREQ INX LDA ESTKL-1,X diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index 840fa08..82c422c 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -37,7 +37,7 @@ predef execmod(modfile)#1 // word version = $0100 // 01.00 word syspath -word cmdptr +word cmdlnptr word = @execmod byte refcons = 0 byte devcons = 0 @@ -45,7 +45,6 @@ byte devcons = 0 // String pool. // byte console[] = ".CONSOLE" -byte autorun[] = "AUTORUN" byte textmode[] = 16, 0, 15 byte hexchar[] = '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' // @@ -53,6 +52,11 @@ byte hexchar[] = '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E', // byte machid = $F2 // Apple ///, 80 columns // +// Working input buffer overlayed with strings table +// +word cmdptr +byte cmdln = "" +// // Standard Library exported functions. // byte sysmodstr[] = "CMDSYS" @@ -75,16 +79,17 @@ byte hpalignstr[] = "HEAPALLOCALIGN" byte hpallocstr[] = "HEAPALLOC" byte hprelstr[] = "HEAPRELEASE" byte hpavlstr[] = "HEAPAVAIL" +byte sysmods[] = "" // overlay with exported strings byte memsetstr[] = "MEMSET" byte memcpystr[] = "MEMCPY" byte uisgtstr[] = "ISUGT" byte uisgestr[] = "ISUGE" byte uisltstr[] = "ISULT" byte uislestr[] = "ISULE" -byte sysmods[] // overlay with exported strings byte sextstr[] = "SEXT" byte divmodstr[] = "DIVMOD" -byte prefix[] // Overlay with exported symbols table +byte autorun[] = "AUTORUN" +byte prefix[] = "" // Overlay with exported symbols table word exports[] = @sysmodstr, @version word = @sysstr, @syscall word = @callstr, @call @@ -104,6 +109,8 @@ word = @hprelstr, @releaseheap word = @hpavlstr, @availheap word = @memsetstr, @memset word = @memcpystr, @memcpy +word = @strcpystr, @strcpy +word = @strcatstr, @strcat word = @uisgtstr, @uword_isgt word = @uisgestr, @uword_isge word = @uisltstr, @uword_islt @@ -543,43 +550,6 @@ TOUPR AND #$7F RTS end // -// Module symbols are entered into the symbol table -// pre-pended with a '#' to differentiate them -// from normal symbols. -// -//def modtosym(mod, dci) -// byte len, c -// (dci).0 = '#'|$80 -// len = 0 -// repeat -// c = (mod).[len] -// len = len + 1 -// (dci).[len] = c -// until !(c & $80) -// return dci -//end -//asm modtosym(mod, dci)#1 -// LDA ESTKL+1,X -// STA SRCL -// LDA ESTKH+1,X -// STA SRCH -// LDA ESTKL,X -// STA ESTKL+1,X -// STA DSTL -// LDA ESTKH,X -// STA ESTKH+1,X -// STA DSTH -// INX -// LDY #$00 -// LDA #'#'+$80 -//- STA (DST),Y -// ASL -// LDA (SRC),Y -// INY -// BCS - -// RTS -//end -// // Lookup routines. // //def lookuptbl(dci, tbl) @@ -698,7 +668,7 @@ end // if deftbl=>3 == addr // return deftbl // fin -// deftbl = deftbl + 5 +// deftbl = deftbl + 6 // loop // return 0 //end @@ -725,7 +695,7 @@ asm lookupdef(addr, deftbl)#1 LDA SRCH STA ESTKH,X RTS -+ LDA #$05 ++ LDA #$06 CLC ADC SRCL STA SRCL @@ -963,17 +933,6 @@ def seg_release(segnum)#1 perr = syscall($45, @params) return perr end -// -// Other SOS calls. -// -def quit()#0 - byte params[1] - - close(0) - params.0 = 0 - perr = syscall($65, @params) -end - // // CONSOLE I/O // @@ -1099,14 +1058,6 @@ end // // Module routines. // -//def lookupmod(mod)#1 -// byte dci[17] -// return lookuptbl(modtosym(mod, @dci), symtbl) -//end -//def addmod(mod, addr)#0 -// byte dci[17] -// addsym(modtosym(mod, @dci), addr) -//end def lookupextern(esd, index)#1 word sym, addr byte str[16] @@ -1156,16 +1107,17 @@ def loadmod(mod)#1 modsize = header:0 moddep = @header.1 defofst = modsize + RELADDR + defext = 0 init = 0 - if rdlen > 4 and header:2 == $6502 // DAVE+1 = magic number :-) + if rdlen > 4 and header:2 == $6502 // magic number // // This is an EXTended RELocatable (data+bytecode) module. // systemflags = header:4 | systemflags - defofst = header:6 - defcnt = header:8 - init = header:10 - moddep = @header.12 + defofst = header:6 + defcnt = header:8 + init = header:10 + moddep = @header.12 // // Load module dependencies. // @@ -1230,18 +1182,20 @@ def loadmod(mod)#1 esd = esd + 4 loop esd = esd + 1 - // - // Locate bytecode defs in allocated segment. - // - modseg[modid] = seg_find($00, @codeseg, @defaddr, (rld - bytecode + 255) >> 8, modid + $12) - if perr - return -perr + if defcnt + // + // Locate bytecode defs in allocated segment. + // + modseg[modid] = seg_find($00, @codeseg, @defaddr, (rld - bytecode + 255) >> 8, modid + $12) + if perr + return -perr + fin + modid = modid + 1 + defext = (codeseg.0 | $80) - 1 + defaddr = (codeseg & $FF00) + $6000 + codefix = defaddr - bytecode + defofst = defaddr - defofst fin - modid = modid + 1 - defext = (codeseg.0 | $80) - 1 - defaddr = (codeseg & $FF00) + $6000 - codefix = defaddr - bytecode - defofst = defaddr - defofst // // Run through the DeFinition Dictionary. // @@ -1350,7 +1304,7 @@ def volumes()#0 if dev_info(i, @devname, @info, 11) == 0 prstr(@devname) if volume(@devname, @volname, @ttlblks, @freblks) == 0 - prstr(" => ") + prstr(" => /") prstr(@volname) cout('/') fin @@ -1359,24 +1313,19 @@ def volumes()#0 next perr = 0 end -def catalog(optpath)#1 - byte path[64] +def catalog(path)#0 byte refnum byte firstblk byte entrylen, entriesblk byte i, type, len word entry, filecnt - if ^optpath - memcpy(@path, optpath, ^optpath + 1) - else - getpfx(@path) - prstr(@path) - crout() + if !^path + path = @prefix fin - refnum = open(@path) + refnum = open(path) if perr - return perr + return fin firstblk = 1 repeat @@ -1420,7 +1369,6 @@ def catalog(optpath)#1 until filecnt == 0 close(refnum) crout() - return 0 end def stripchars(strptr)#1 while ^strptr and ^(strptr + 1) > ' ' @@ -1493,7 +1441,7 @@ init_cons // // Print PLASMA version // -prstr("PLASMA Pre3 "); prbyte(version.1); cout('.'); prbyte(version.0); crout +prstr("PLASMA Pre4 "); prbyte(version.1); cout('.'); prbyte(version.0); crout // // Init 2K symbol table. // @@ -1513,9 +1461,10 @@ syspath = @sysmods // // Try to load autorun. // -cmdptr = heap -^cmdptr = 0 -autorun = open(@autorun) +cmdlnptr = @cmdln +cmdptr = heap +^cmdptr = 0 +autorun = open(@autorun) if autorun > 0 ^cmdptr = read(autorun, cmdptr + 1, 64) close(autorun) @@ -1534,13 +1483,16 @@ perr = 0 while 1 if ^cmdptr when toupper(parsecmd(cmdptr)) - is 'Q' - quit is 'C' catalog(cmdptr) break is 'P' - setpfx(cmdptr) + if ^cmdptr and ^(cmdptr + 1) <> '/' + strcat(@prefix, cmdptr) + else + strcpy(@prefix, cmdptr) + fin + setpfx(@prefix) break is '/' repeat @@ -1561,7 +1513,7 @@ while 1 saveX execmod(striptrail(cmdptr)) restoreX - write(refcons, @textmode, 3) + init_cons break otherwise prstr("?\n") @@ -1578,5 +1530,6 @@ while 1 fin prstr(getpfx(@prefix)) cmdptr = rdstr($BA) + strcpy(@cmdln, cmdptr) loop done From 16932e90f7514a767098a8044e06536972cd447e Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 4 Feb 2018 13:01:07 -0800 Subject: [PATCH 20/40] change opensys to allocate number of I/O buffers for open --- src/inc/fileio.plh | 2 +- src/libsrc/fileio.pla | 104 ++++++++++++++++++++++++++++------------ src/toolsrc/codegen.pla | 2 +- src/toolsrc/lex.pla | 4 +- src/toolsrc/plasm.pla | 2 +- 5 files changed, 78 insertions(+), 36 deletions(-) diff --git a/src/inc/fileio.plh b/src/inc/fileio.plh index d759ecc..699a514 100644 --- a/src/inc/fileio.plh +++ b/src/inc/fileio.plh @@ -38,7 +38,7 @@ import fileio word setpfx word getfileinfo word geteof - word openbuf + word iobufalloc word open word close word read diff --git a/src/libsrc/fileio.pla b/src/libsrc/fileio.pla index b96ee59..db299a2 100644 --- a/src/libsrc/fileio.pla +++ b/src/libsrc/fileio.pla @@ -27,7 +27,7 @@ struc t_fileio word setpfx word getfileinfo word geteof - word openbuf + word iobufalloc word open word close word read @@ -38,14 +38,14 @@ struc t_fileio word readblock word writeblock end -predef a2getpfx(path), a23setpfx(path), a2getfileinfo(path, fileinfo), a23geteof(refnum), a2openbuf(path, iobuf), a2open(path), a23close(refnum) +predef a2getpfx(path), a23setpfx(path), a2getfileinfo(path, fileinfo), a23geteof(refnum), a2iobufs(iobufs), a2open(path), a2close(refnum) predef a23read(refnum, buf, len), a2write(refnum, buf, len), a2create(path, type, aux), a23destroy(path) predef a2newline(refnum, emask, nlchar), a2readblock(unit, buf, block), a2writeblock(unit, buf, block) // // Exported function table. // word fileio[] -word = @a2getpfx, @a23setpfx, @a2getfileinfo, @a23geteof, @a2openbuf, @a2open, @a23close +word = @a2getpfx, @a23setpfx, @a2getfileinfo, @a23geteof, @a2iobufs, @a2open, @a2close word = @a23read, @a2write, @a2create, @a23destroy word = @a2newline, @a2readblock, @a2writeblock // @@ -53,6 +53,12 @@ word = @a2newline, @a2readblock, @a2writeblock // export byte perr // +// I/O buffers +// +const MAX_IOBUFS = 4 +byte iobuf_ref[MAX_IOBUFS] +word iobuf_addr[MAX_IOBUFS] = sysbuf +// // ProDOS/SOS routines // def a1getpfx(path) @@ -128,34 +134,54 @@ def a1open(path) *CFFA1FileName = path return 0 end -def a2openbuf(path, iobuf) - byte params[6] - params.0 = 3 - params:1 = path - params:3 = iobuf - params.5 = 0 - perr = syscall($C8, @params) - return params.5 +def a2iobufs(iobufs) + byte i + word freebuf, bufaddr + + if iobufs > MAX_IOBUFS + iobufs = MAX_IOBUFS + fin + if iobufs + iobufs-- // Subtract off system I/O buffer + if iobufs + bufaddr = heapallocalign(1024 * iobufs, 8, @freebuf) + for i = 1 to MAX_IOBUFS-1 + if not iobuf_addr[i] + iobuf_addr[i] = bufaddr + bufaddr = bufaddr + 1024 + iobufs-- + if not iobufs + return freebuf + fin + fin + next + return freebuf + fin + else + for i = 1 to MAX_IOBUFS-1 + iobuf_addr[i] = 0 // Free I/O buffers if 0 passed in + next + fin + return 0 +end +def a13iobufs(iobufs) + return 0 end def a2open(path) - byte params[6] - params.0 = 3 - params:1 = path - params:3 = sysbuf - params.5 = 0 - perr = syscall($C8, @params) - return params.5 -end -def a3openbuf(path, iobuf) - byte params[7] - - params.0 = 4 - params:1 = path - params.3 = 0 - params:4 = iobuf - params.6 = 0 - perr = syscall($C8, @params) - return params.3 + byte i, params[6] + + for i = 0 to MAX_IOBUFS-1 + if iobuf_addr[i] and not iobuf_ref[i] + params.0 = 3 + params:1 = path + params:3 = iobuf_addr[i] + params.5 = 0 + perr = syscall($C8, @params) + iobuf_ref[i] = params.5 + return params.5 + fin + next + return 0 end def a3open(path) byte params[7] @@ -171,7 +197,22 @@ end def a1close(refnum) return perr end -def a23close(refnum) +def a2close(refnum) + byte i, params[2] + + for i = 0 to MAX_IOBUFS-1 + if refnum == iobuf_ref[i] + iobuf_ref[i] = 0 + params.0 = 1 + params.1 = refnum + perr = syscall($CC, @params) + return perr + fin + next + perr = $45 + return perr +end +def a3close(refnum) byte params[2] params.0 = 1 @@ -318,7 +359,9 @@ when MACHID & MACHID_MODEL is MACHID_III fileio:getpfx = @a3getpfx fileio:getfileinfo = @a3getfileinfo + fileio:iobufalloc = @a13iobufs fileio:open = @a3open + fileio:close = @a3close fileio:write = @a3write fileio:create = @a3create fileio:newline = @a3newline @@ -330,6 +373,7 @@ when MACHID & MACHID_MODEL fileio:setpfx = @a1setpfx fileio:getfileinfo = @a1getfileinfo fileio:geteof = @a1geteof + fileio:iobufalloc = @a13iobufs fileio:open = @a1open fileio:close = @a1close fileio:read = @a1read diff --git a/src/toolsrc/codegen.pla b/src/toolsrc/codegen.pla index ecda769..299fd2c 100644 --- a/src/toolsrc/codegen.pla +++ b/src/toolsrc/codegen.pla @@ -508,7 +508,7 @@ def init_idglobal#0 fixup_addr = heapalloc(fixup_num*2) idglobal_tbl = heapalloc(globalbufsz) idlocal_tbl = heapalloc(localbufsz) - codebufsz = heapavail - 4096 + codebufsz = heapavail - 2048 codebuff = heapalloc(codebufsz) codeptr = codebuff lastglobal = idglobal_tbl diff --git a/src/toolsrc/lex.pla b/src/toolsrc/lex.pla index 159d86a..2a6474c 100644 --- a/src/toolsrc/lex.pla +++ b/src/toolsrc/lex.pla @@ -343,8 +343,7 @@ def nextln if incref; puts("Nested INCLUDEs not allowed\n"); exit_err(0); fin if scan <> STR_TKN; puts("Missing INCLUDE file\n"); exit_err(0); fin strcpy(@incfile, constval) - sysincbuf = heapallocalign(1024, 8, @sysincfre) - incref = fileio:openbuf(@incfile, sysincbuf) + incref = fileio:open(@incfile) if not incref puts("Unable to open INCLUDE file: ") puts(@incfile) @@ -362,7 +361,6 @@ def nextln else if refnum == incref fileio:close(incref) - heaprelease(sysincfre) incref = 0 refnum = srcref parsefile = @srcfile diff --git a/src/toolsrc/plasm.pla b/src/toolsrc/plasm.pla index 17b2fe3..31572f4 100644 --- a/src/toolsrc/plasm.pla +++ b/src/toolsrc/plasm.pla @@ -278,7 +278,6 @@ byte outflags byte refnum, srcref, incref byte[32] srcfile, incfile, relfile word parsefile // Pointer to current file -word sysincbuf, sysincfre // System I/O buffer for include files word srcline // Saved source line number // // Scanner variables @@ -464,6 +463,7 @@ if ^arg fin fin if srcfile and relfile + fileio:iobufalloc(2) // Reserve two I/O buffers srcref = fileio:open(@srcfile) if srcref fileio:newline(srcref, $7F, $0D) From 5c322acf062b2033cf5a1b6cf839cb2789f57000 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 4 Feb 2018 20:53:04 -0800 Subject: [PATCH 21/40] Fix gets() --- src/vmsrc/plvm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vmsrc/plvm.c b/src/vmsrc/plvm.c index 3296c35..5395c44 100755 --- a/src/vmsrc/plvm.c +++ b/src/vmsrc/plvm.c @@ -499,12 +499,14 @@ void call(uword pc) PUSH(getchar()); break; case 8: // LIBRARY STDLIB::GETS + c = POP; + putchar(c); gets(sz); for (i = 0; sz[i]; i++) mem_data[0x200 + i] = sz[i]; mem_data[0x200 + i] = 0; mem_data[0x1FF] = i; - PUSH(i); + PUSH(0x1FF); break; default: printf("\nUnimplemented call code:$%02X\n", mem_data[pc - 1]); From 691f153b22ca0f380044446dcf38e3b85ee27343 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 5 Feb 2018 13:08:28 -0800 Subject: [PATCH 22/40] SOS interpreter launcher --- src/libsrc/sos.pla | 155 +++++++++++++++++++++++++++++++++++++++++++++ src/makefile | 7 +- src/mkrel | 1 + 3 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 src/libsrc/sos.pla diff --git a/src/libsrc/sos.pla b/src/libsrc/sos.pla new file mode 100644 index 0000000..69a41af --- /dev/null +++ b/src/libsrc/sos.pla @@ -0,0 +1,155 @@ +include "inc/cmdsys.plh" +include "inc/args.plh" +include "inc/fileio.plh" + +word arg, ref, interp + +asm equates + !SOURCE "vmsrc/plvmzp.inc" +end +// +// Exec SOS.INTERP image +// +asm sosexec(addr)#0 + LDA ESTKL,X ; PULL ADDRESSES FROM INTERP HEADER + STA SRCL + LDA ESTKH,X + STA SRCH + LDY #$0A + LDA (SRC),Y + INY + STA DSTL + PHA + LDA (SRC),Y + INY + STA DSTH + PHA + LDA (SRC),Y + INY + STA TMPL + LDA (SRC),Y + STA TMPH + TYA ; SKIP INTERP HEADER FOR SRC + SEC + ADC SRCL + STA SRCL + BCC + + INC SRCH ++ LDA DSTL + CMP SRCL + LDA DSTH + SBC SRCH + BCC REVCPY +; +; FORWARD COPY +; + LDY TMPL + BEQ FORCPYLP + INC TMPH + LDY #$00 +FORCPYLP LDA (SRC),Y + STA (DST),Y + INY + BNE + + INC DSTH + INC SRCH ++ DEC TMPL + BNE FORCPYLP + DEC TMPH + BNE FORCPYLP + BEQ CPYMEX +; +; REVERSE COPY +; +REVCPY ;CLC + LDA TMPL + ADC DSTL + STA DSTL + LDA TMPH + ADC DSTH + STA DSTH + CLC + LDA TMPL + ADC SRCL + STA SRCL + LDA TMPH + ADC SRCH + STA SRCH + DEC DSTH + DEC SRCH + LDY #$FF + LDA TMPL + BEQ REVCPYLP + INC TMPH +REVCPYLP LDA (SRC),Y + STA (DST),Y + DEY + CPY #$FF + BNE + + DEC DSTH + DEC SRCH ++ DEC TMPL + BNE REVCPYLP + DEC TMPH + BNE REVCPYLP +CPYMEX PLA + STA DSTH + PLA + STA DSTL + JMP (DST) ; JUMP TO INTERP + +end +def seg_release(segnum)#1 + byte params[2] + + params.0 = 1 + params.1 = segnum + perr = syscall($45, @params) + return perr +end +def strcmp(str1, str2) + byte i + if (^str1 == ^str2) + for i = ^str1 downto 1 + if ^(str1 + i) <> ^(str2 + i) + return FALSE + fin + next + return TRUE + fin + return FALSE +end +if MACHID <> $F2 + puts("Apple /// SOS required.\n") + return -1 +fin +arg = argNext(argFirst) +if ^arg + ref = fileio:open(arg) + if ref + arg = argNext(arg) + if ^arg + fileio:setpfx(arg) + puts(arg); puts("/:\n") + fin + interp = heapmark()+1 + fileio:read(ref, interp, heapavail()) + fileio:close(ref) + ^(interp - 1) = 8 + if strcmp(interp - 1, "SOS NTRP") + //puts("INTERP opt hdr: $"); puth(interp=>$08); putln + //puts("INTERP address: $"); puth(interp=>$0A); putln + //puts("INTERP size: $"); puth(interp=>$0C); putln + fileio:close(0) // Close all files + seg_release(0) // Free all segments + sosexec(interp) + else + puts("Not a SOS.INTERP file.\n") + fin + else + puts("File not found.\n") + fin +else + puts("Usage: +SOS [PREFIX]\n") +fin +done diff --git a/src/makefile b/src/makefile index 3cfe7b4..392864a 100755 --- a/src/makefile +++ b/src/makefile @@ -8,6 +8,7 @@ PLVM03 = SOS.INTERP\#050000 CMD = CMD\#061000 ED = ED\#FE1000 SB = SB\#FF2000 +SOS = SOS\#FE1000 ROD = ROD\#FE1000 SIEVE = SIEVE\#FE1000 ARGS = ARGS\#FE1000 @@ -72,7 +73,7 @@ TXTTYPE = .TXT #SYSTYPE = \#FF2000 #TXTTYPE = \#040000 -all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) +all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) clean: -rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) @@ -176,6 +177,10 @@ $(MON): samplesrc/mon.pla $(PLVM02) $(PLASM) ./$(PLASM) -AMOW < samplesrc/mon.pla > samplesrc/mon.a acme --setpc 4094 -o $(MON) samplesrc/mon.a +$(SOS): libsrc/sos.pla $(PLVM02) $(PLASM) + ./$(PLASM) -AMO < libsrc/sos.pla > libsrc/sos.a + acme --setpc 4094 -o $(SOS) libsrc/sos.a + $(ROD): samplesrc/rod.pla $(PLVM02) $(PLASM) ./$(PLASM) -AMO < samplesrc/rod.pla > samplesrc/rod.a acme --setpc 4094 -o $(ROD) samplesrc/rod.a diff --git a/src/mkrel b/src/mkrel index e8be6fd..8aabd61 100755 --- a/src/mkrel +++ b/src/mkrel @@ -26,6 +26,7 @@ cp SPIPORT#FE1000 prodos/sys/SPIPORT.REL cp SNDSEQ#FE1000 prodos/sys/SNDSEQ.REL cp UTHERNET#FE1000 prodos/sys/UTHERNET.REL cp UTHERNET2#FE1000 prodos/sys/UTHERNET2.REL +cp SOS#FE1000 prodos/sys/SOS.REL cp ../sysfiles/FP6502.CODE#060000 prodos/sys/FP6502.CODE.BIN cp ../sysfiles/ELEMS.CODE#060000 prodos/sys/ELEMS.CODE.BIN From be5dfdba4bb7f23adec11ce42195662977c8d15d Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 5 Feb 2018 14:54:06 -0800 Subject: [PATCH 23/40] Could this be it? --- src/libsrc/longjmp.pla | 4 ---- src/toolsrc/ed.pla | 12 +++++------- src/toolsrc/plasm.pla | 5 ++++- src/vmsrc/cmd.pla | 2 +- src/vmsrc/soscmd.pla | 2 +- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/libsrc/longjmp.pla b/src/libsrc/longjmp.pla index 78c9128..99aa92e 100644 --- a/src/libsrc/longjmp.pla +++ b/src/libsrc/longjmp.pla @@ -20,8 +20,6 @@ export asm except(env) TSX STX TMPL LDY TMPL - LDA IPX ; APPLE 3-ISM - STA TMPH - LDA $0100,Y STA (SRC),Y INY @@ -60,8 +58,6 @@ export asm throw(env, retval) INX BNE - DEC DST+1 - LDA TMPH ; APPLE 3-ISM - STA IPX LDX TMPL TXS LDY TMPL diff --git a/src/toolsrc/ed.pla b/src/toolsrc/ed.pla index ff17804..135db79 100755 --- a/src/toolsrc/ed.pla +++ b/src/toolsrc/ed.pla @@ -315,12 +315,13 @@ end // // File routines // -def readtxt(filename)#0 +def readtxt(filename, startline)#0 byte txtbuf[81], refnum, i, j refnum = fileio:open(filename) if refnum fileio:newline(refnum, $7F, $0D) + numlines = startline repeat txtbuf = fileio:read(refnum, @txtbuf + 1, MAXLNLEN) if txtbuf @@ -1065,16 +1066,14 @@ def cmdmode#0 cmdptr = gets($BA) when toupper(parsecmd(cmdptr)) is 'A' - readtxt(cmdptr) + readtxt(cmdptr, numlines) flags = flags | changed break is 'R' if chkchng inittxtbuf - numlines = 0 strstripcpy(@filename, cmdptr) - readtxt(@filename) - if numlines == 0; numlines = 1; fin + readtxt(@filename, 0) flags = flags & ~changed fin break @@ -1135,8 +1134,7 @@ arg = argNext(argFirst) if ^arg strcpy(@filename, arg) puts(@filename) - numlines = 0 - readtxt(@filename) + readtxt(@filename, 0) fin curschr = '+' flags = flags | insmode diff --git a/src/toolsrc/plasm.pla b/src/toolsrc/plasm.pla index 31572f4..42fd156 100644 --- a/src/toolsrc/plasm.pla +++ b/src/toolsrc/plasm.pla @@ -386,7 +386,10 @@ def exit_err(err)#0 if err & ERR_TABLE; puts("table"); fin if err & ERR_SYNTAX; puts("syntax"); fin putcurln - fileio:close(0) // Close all open files + if incref + fileio:close(incref) // Close include file if open + fin + fileio:close(srcref) // Close source file throw(exit, TRUE) end // diff --git a/src/vmsrc/cmd.pla b/src/vmsrc/cmd.pla index db0195d..feff331 100755 --- a/src/vmsrc/cmd.pla +++ b/src/vmsrc/cmd.pla @@ -1433,7 +1433,7 @@ heap = *freemem // // Print PLASMA version // -prstr("PLASMA Pre3 "); prbyte(version.1); cout('.'); prbyte(version.0); crout +prstr("PLASMA "); prbyte(version.1); cout('.'); prbyte(version.0); crout // // Init symbol table. // diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index 82c422c..59c7a0f 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -1441,7 +1441,7 @@ init_cons // // Print PLASMA version // -prstr("PLASMA Pre4 "); prbyte(version.1); cout('.'); prbyte(version.0); crout +prstr("PLASMA "); prbyte(version.1); cout('.'); prbyte(version.0); crout // // Init 2K symbol table. // From 14fabc1467a0e064d4fefbbd39222cde9076b94e Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 08:26:23 -0800 Subject: [PATCH 24/40] Add MockingBoard select options and Apple /// support --- src/libsrc/sndseq.pla | 130 ++++++++++++++++++++++++++++-------------- 1 file changed, 88 insertions(+), 42 deletions(-) diff --git a/src/libsrc/sndseq.pla b/src/libsrc/sndseq.pla index 2fb8c72..c60cb9a 100755 --- a/src/libsrc/sndseq.pla +++ b/src/libsrc/sndseq.pla @@ -48,6 +48,10 @@ struc t_PSG byte ENVSHAPE // Envelope Shape end // +// Apple III hardware constants. +// +const ENV_REG = $FFDF +// // Sequence event // struc t_event @@ -60,10 +64,17 @@ end // predef musicPlay(track, rept)#0 predef musicStop#0 +predef spkrSequence(yield, func)#0 +predef a2spkrTone(pitch, duration)#0 +predef a2spkrPWM(sample, speed, len)#0 // // Static sequencer values // -export word musicSequence +export word musicSequence = @spkrSequence +export word spkrTone = @a2spkrTone +export word spkrPWM = @a2spkrPWM + +word instr[] // Overlay with other variables word seqTrack, seqEvent, seqTime, eventTime, updateTime byte numNotes, seqRepeat byte indexA[2], indexB[2], indexC[2] @@ -76,8 +87,8 @@ word periods[2] = @periods1, @periods2 // MockingBoard data. // word[] mbVIAs // Treat this as an array of VIA ptrs -word mbVIA1 = -1 // Init to "discover MockingBoard flag" value -word mbVIA2 = 0 +word mbVIA1, mbVIA2 +word mbSlot = -1 // // Octave basis frequency periods (starting at MIDI note #12) // Notes will be encoded as basis note (LSNibble) and octave (MSNibble)) @@ -203,7 +214,7 @@ end // // Apple II speaker tone generator routines // -export asm spkrTone(pitch, duration)#0 +asm a2spkrTone(pitch, duration)#0 STX ESP LDY ESTKH,X LDA ESTKL,X @@ -277,7 +288,7 @@ TONEXIT PLP INX RTS end -export asm spkrPWM(sample, speed, len)#0 +asm a2spkrPWM(sample, speed, len)#0 STX ESP LDY ESTKH,X LDA ESTKL,X @@ -317,6 +328,22 @@ export asm spkrPWM(sample, speed, len)#0 INX RTS end +def a3spkrTone(pitch, duration)#0 + byte env + + env = ^ENV_REG + ^ENV_REG = env | $C0 + a2spkrTone(pitch, duration) + ^ENV_REG = env +end +def a3spkrPWM(sample, speed, len)#0 + byte env + + env = ^ENV_REG + ^ENV_REG = env | $C0 + a2spkrPWM(sample, speed, len) + ^ENV_REG = env +end // // Search slots for MockingBoard // @@ -344,25 +371,27 @@ def mbTicklePSG(pVIA) return 0 end def mbSearch(slot) - if slot - mbVIA1 = mbTicklePSG($C000 + (slot << 8)) - if mbVIA1 - mbVIA2 = mbTicklePSG(mbVIA1 + $80) - return slot - fin - else - for slot = 1 to 7 - if slot == 3 or slot == 6 - continue - fin + if MACHID <> $F2 and slot >= 0 and slot <= 7// Apple 3 + if slot mbVIA1 = mbTicklePSG($C000 + (slot << 8)) if mbVIA1 mbVIA2 = mbTicklePSG(mbVIA1 + $80) return slot fin - next + else + for slot = 1 to 7 + if slot == 3 or slot == 6 + continue + fin + mbVIA1 = mbTicklePSG($C000 + (slot << 8)) + if mbVIA1 + mbVIA2 = mbTicklePSG(mbVIA1 + $80) + return slot + fin + next + fin fin - return 0 + return -1 end def psgSetup(pVIA)#0 psgWrite(pVIA, MIXER, $3F) // Turn everything off @@ -672,7 +701,7 @@ def spkrSequence(yield, func)#0 if numNotes > 1 for i = 0 to MAX_SPKR_NOTES-1 if notes1[i] - spkrTone(periods1[i], arpeggioDuration[numNotes]) + spkrTone(periods1[i], arpeggioDuration[numNotes])#0 fin *rndseed++ next @@ -688,7 +717,7 @@ def spkrSequence(yield, func)#0 next duration = eventTime - seqTime seqTime = duration + seqTime - spkrTone(period, DUR16TH * duration) + spkrTone(period, DUR16TH * duration)#0 fin if ^$C000 > 127; return; fin if yieldTime <= seqTime; func()#0; yieldTime = seqTime + yield; fin @@ -709,7 +738,7 @@ def noSequence(yield, func)#0 seqTime++ if seqTime < 0; seqTime = 1; fin // Capture wrap-around *rndseed++ - spkrTone(0, DUR16TH) // Waste 16th of a second playing silence + a2spkrTone(0, DUR16TH) // Waste 16th of a second playing silence if ^$C000 > 127; return; fin if yield == seqTime; func()#0; seqTime = 0; fin until FALSE @@ -721,22 +750,17 @@ export def musicPlay(track, rept)#0 byte i // - // First time search for MockingBoard + // Select proper sequencer based on hardware // - if mbVIA1 == -1 - if !mbSearch(0) - // - // No MockingBoard - scale octave0 for speaker - // - for i = 0 to 11 - spkrOctave0[i] = mbOctave0[i]/NOTEDIV - next - fin + if mbSlot > 0 + musicSequence = @mbSequence + else + musicSequence = @spkrSequence fin // // Zero out active notes // - for i = 0 to MAX_MBCH_NOTES-1; notes1[i] = 0; notes2[i] = 0; next + for i = 0 to MAX_MBCH_NOTES-1; notes1[i] = 0; notes2[i] = 0; next for i = 0 to MAX_MBCH_NOTES-1; periods1[i] = 0; periods2[i] = 0; next // // Start sequencing @@ -747,14 +771,6 @@ export def musicPlay(track, rept)#0 seqTime = 0 eventTime = seqEvent->deltatime numNotes = 0 - // - // Select proper sequencer based on hardware - // - if mbVIA1 - musicSequence = @mbSequence - else - musicSequence = @spkrSequence - fin end // // Stop sequencing music track @@ -772,6 +788,36 @@ export def musicGetKey(yield, backgroundProc)#1 ^$C010 return ^$C000 end + +when MACHID & MACHID_MODEL + is MACHID_III + spkrTone = @a3spkrTone + spkrPWM = @a3spkrPWM + break + is MACHID_I + puts("Sound unsupported.\n") + return -1 + break + otherwise + puts("MockingBoars Slot:\n") + puts("ENTER = None\n") + puts("0 = Scan\n") + puts("1-7 = Slot #\n") + instr = gets('>'|$80) + if ^instr + mbSlot = mbSearch(^(instr + 1) - '0') + fin + if mbSlot < 0 + // + // No MockingBoard - scale octave0 for speaker + // + for instr = 0 to 11 + spkrOctave0[instr] = mbOctave0[instr]/NOTEDIV + next + fin + break +wend + done //////////////////////////////////////////////////////////////////////////////// @@ -805,13 +851,13 @@ musicGetKey(yieldtime, yieldproc) The low level internal speaker routines used to generate tones and waveforms can be called for warnings, sound effects, etc: -spkrTone(period, duration) +spkrTone(period, duration)#0 Play a tone Params: (1020000 / 64 / period) Hz (duration * 32 * 256 / 1020000) seconds -spkrPWM(samples, speed, len) +spkrPWM(samples, speed, len)#0 Play a Pulse Width Modulated waveform Params: Pointer to 8 bit pulse width samples From d2566c89c03b383de5068ba7c210543f3cbf05b0 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 08:35:48 -0800 Subject: [PATCH 25/40] Multiple versions of spkr routines called through pointer --- src/inc/sndseq.plh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/inc/sndseq.plh b/src/inc/sndseq.plh index dbde81a..b20a464 100644 --- a/src/inc/sndseq.plh +++ b/src/inc/sndseq.plh @@ -1,5 +1,6 @@ import sndseq word musicSequence // musicSequence(yield, backgroundProc)#0 - predef spkrTone(pitch, duration)#0, spkrPWM(sample, speed, len)#0 + word spkrTone // spkrTone(pitch, duration)#0 + word spkrPWM // spkrPWM(sample, speed, len)#0 predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield, backgroundProc)#1 end From b56b57fa4d5c75de47f508306517fabd438256b1 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 09:00:18 -0800 Subject: [PATCH 26/40] Add echo on/off to conio for Apple 3 --- src/inc/conio.plh | 9 +- src/libsrc/conio.pla | 11 +- src/samplesrc/rogue.combat.pla | 3 + src/samplesrc/rogue.pla | 2 + src/samplesrc/rpncalc.pla | 660 +++++++++++++++++---------------- 5 files changed, 352 insertions(+), 333 deletions(-) diff --git a/src/inc/conio.plh b/src/inc/conio.plh index 129ecba..26d5568 100644 --- a/src/inc/conio.plh +++ b/src/inc/conio.plh @@ -1,10 +1,13 @@ import conio - const NORMAL = $FF - const INVERSE = $3F - const FLASH = $7F + const NORMAL = $FF + const INVERSE = $3F + const FLASH = $7F + const ECHO_ON = $80 + const ECHO_OFF = $00 struc t_conio word keypressed word getkey + word echo word home word gotoxy word viewport diff --git a/src/libsrc/conio.pla b/src/libsrc/conio.pla index 3cff845..363d7eb 100644 --- a/src/libsrc/conio.pla +++ b/src/libsrc/conio.pla @@ -38,6 +38,7 @@ const ENV_REG = $FFDF struc t_conio word keypressed word getkey + word echo word home word gotoxy word viewport @@ -52,7 +53,7 @@ end // // Predefined functions. // -predef a2keypressed,a2home,a2gotoxy(x,y),a2viewport(left, top, width, height),a2texttype(type) +predef a2keypressed,a2home,a12echo(state),a2gotoxy(x,y),a2viewport(left, top, width, height),a2texttype(type) predef a2textmode(cols),a2grmode(mix),a2grcolor(color),a2grplot(x,y),a2tone(duration, delay),a2rnd // // Exported function table. @@ -63,6 +64,7 @@ word conio[] // word = @a2keypressed word = @getc +word = @a12echo word = @a2home word = @a2gotoxy word = @a2viewport @@ -167,6 +169,9 @@ end def a1keypressed return ^$D011 >= 128 end +def a12echo(state) + return 0 +end def a1home byte l for l = 0 to 23 @@ -292,6 +297,9 @@ def a3keypressed dev_status(cmdsys.devcons, 5, @count) return count end +def a3echo(state) + return dev_control(cmdsys.devcons, 11, @state) +end def a3home //curshpos = 0 //cursvpos = 0 @@ -386,6 +394,7 @@ when MACHID & MACHID_MODEL is MACHID_III conio:keypressed = @a3keypressed conio:getkey = @a13getkey + conio:echo = @a3echo conio:home = @a3home conio:gotoxy = @a3gotoxy conio:viewport = @a3viewport diff --git a/src/samplesrc/rogue.combat.pla b/src/samplesrc/rogue.combat.pla index 1d4f790..8e88b1a 100644 --- a/src/samplesrc/rogue.combat.pla +++ b/src/samplesrc/rogue.combat.pla @@ -135,6 +135,7 @@ end export def fight(player, enemy) word p_atck, e_atck + conio:echo(ECHO_ON) repeat conio:home() conio:gotoxy(0, 0) @@ -159,6 +160,7 @@ export def fight(player, enemy) next conio:gotoxy(12, 8); puts("F)ight or R)un?") if toupper(conio:getkey()) == 'R' + conio:echo(ECHO_OFF) return 1 else // @@ -204,6 +206,7 @@ export def fight(player, enemy) fin fin until player->health == 0 or enemy->life == 0 + conio:echo(ECHO_OFF) return 0 end diff --git a/src/samplesrc/rogue.pla b/src/samplesrc/rogue.pla index d74503b..d7f115a 100755 --- a/src/samplesrc/rogue.pla +++ b/src/samplesrc/rogue.pla @@ -625,6 +625,7 @@ if ^instr > 15 ^instr = 15 fin memcpy(@player.name, instr, ^instr + 1) +conio:echo(ECHO_OFF) while loadmap(level) puts(@prepstr) free_entities = heapmark() @@ -650,6 +651,7 @@ while loadmap(level) break fin loop +conio:echo(ECHO_ON) if player.health > 0 puts(@youmadeitstr) puti(player.gold) diff --git a/src/samplesrc/rpncalc.pla b/src/samplesrc/rpncalc.pla index f04398d..3abd545 100644 --- a/src/samplesrc/rpncalc.pla +++ b/src/samplesrc/rpncalc.pla @@ -12,14 +12,14 @@ const ZEROSTR = $3001 // Keypad structure // struc t_keypad - byte keychar - byte xpos - byte ypos - byte keystr[8] + byte keychar + byte xpos + byte ypos + byte keystr[8] end struc t_keyinput - byte keyinfo[t_keypad] - word phandler + byte keyinfo[t_keypad] + word phandler end predef delKey(pkey)#0, cmdKey(pkey)#0, dropKey(pkey)#0, clearKey(pkey)#0 predef digitKey(pkey)#0, pointKey(pkey)#0, opKey(pkey)#0 @@ -46,401 +46,403 @@ byte memory[10*t_fpureg] // Key values // byte[t_keypad] keypad = $08, 0, 0, "" -word = @delKey -byte[t_keypad] = $1B, 0, 0, "" -word = @cmdKey -byte[t_keypad] = '=', 0, 0, "" -word = @copyKey -byte[t_keypad] = 'Z', 0, 0, "" -word = @clearKey -byte[t_keypad] = '7', 3, 10, "[7]" -word = @digitKey -byte[t_keypad] = '8', 7, 10, "[8]" -word = @digitKey -byte[t_keypad] = '9', 11, 10, "[9]" -word = @digitKey -byte[t_keypad] = '/', 15, 10, "[/]" -word = @opKey -byte[t_keypad] = '4', 3, 12, "[4]" -word = @digitKey -byte[t_keypad] = '5', 7, 12, "[5]" -word = @digitKey -byte[t_keypad] = '6', 11, 12, "[6]" -word = @digitKey -byte[t_keypad] = '*', 15, 12, "[*]" -word = @opKey -byte[t_keypad] = '1', 3, 14, "[1]" -word = @digitKey -byte[t_keypad] = '2', 7, 14, "[2]" -word = @digitKey -byte[t_keypad] = '3', 11, 14, "[3]" -word = @digitKey -byte[t_keypad] = '-', 15, 14, "[-]" -word = @opKey -byte[t_keypad] = '0', 3, 16, "[0]" -word = @digitKey -byte[t_keypad] = '.', 7, 16, "[.]" -word = @pointKey -byte[t_keypad] = 'X', 11, 16, "[X]" -word = @dropKey -byte[t_keypad] = '+', 15, 16, "[+]" -word = @opKey -byte[t_keypad] = $0D, 3, 18, "[ENTER]" -word = @enterKey -byte[t_keypad] = '<', 11, 18, "[<]" -word = @memKey -byte[t_keypad] = '>', 15, 18, "[>]" -word = @memKey -byte[t_keypad] = 'R', 3, 20, "[SQ(R)]" -word = @opKey -byte[t_keypad] = 'H', 11, 20, "[C(H)S]" -word = @chsKey -byte[t_keypad] = 'C', 22, 14, "[(C)OS]" -word = @elemsKey -byte[t_keypad] = 'S', 22, 16, "[(S)IN]" -word = @elemsKey -byte[t_keypad] = 'T', 22, 18, "[(T)AN]" -word = @elemsKey -byte[t_keypad] = 'A', 22, 20, "[(A)TN]" -word = @elemsKey -byte[t_keypad] = '^', 30, 14, "[X(^)Y]" -word = @elemsKey -byte[t_keypad] = 'L', 30, 16, "[(L)G2]" -word = @elemsKey -byte[t_keypad] = 'E', 30, 18, "[(E)^X]" -word = @elemsKey -byte[t_keypad] = 'N', 30, 20, "[L(N)X]" -word = @elemsKey -byte = 0 +word = @delKey +byte[t_keypad] = $1B, 0, 0, "" +word = @cmdKey +byte[t_keypad] = '=', 0, 0, "" +word = @copyKey +byte[t_keypad] = 'Z', 0, 0, "" +word = @clearKey +byte[t_keypad] = '7', 3, 10, "[7]" +word = @digitKey +byte[t_keypad] = '8', 7, 10, "[8]" +word = @digitKey +byte[t_keypad] = '9', 11, 10, "[9]" +word = @digitKey +byte[t_keypad] = '/', 15, 10, "[/]" +word = @opKey +byte[t_keypad] = '4', 3, 12, "[4]" +word = @digitKey +byte[t_keypad] = '5', 7, 12, "[5]" +word = @digitKey +byte[t_keypad] = '6', 11, 12, "[6]" +word = @digitKey +byte[t_keypad] = '*', 15, 12, "[*]" +word = @opKey +byte[t_keypad] = '1', 3, 14, "[1]" +word = @digitKey +byte[t_keypad] = '2', 7, 14, "[2]" +word = @digitKey +byte[t_keypad] = '3', 11, 14, "[3]" +word = @digitKey +byte[t_keypad] = '-', 15, 14, "[-]" +word = @opKey +byte[t_keypad] = '0', 3, 16, "[0]" +word = @digitKey +byte[t_keypad] = '.', 7, 16, "[.]" +word = @pointKey +byte[t_keypad] = 'X', 11, 16, "[X]" +word = @dropKey +byte[t_keypad] = '+', 15, 16, "[+]" +word = @opKey +byte[t_keypad] = $0D, 3, 18, "[ENTER]" +word = @enterKey +byte[t_keypad] = '<', 11, 18, "[<]" +word = @memKey +byte[t_keypad] = '>', 15, 18, "[>]" +word = @memKey +byte[t_keypad] = 'R', 3, 20, "[SQ(R)]" +word = @opKey +byte[t_keypad] = 'H', 11, 20, "[C(H)S]" +word = @chsKey +byte[t_keypad] = 'C', 22, 14, "[(C)OS]" +word = @elemsKey +byte[t_keypad] = 'S', 22, 16, "[(S)IN]" +word = @elemsKey +byte[t_keypad] = 'T', 22, 18, "[(T)AN]" +word = @elemsKey +byte[t_keypad] = 'A', 22, 20, "[(A)TN]" +word = @elemsKey +byte[t_keypad] = '^', 30, 14, "[X(^)Y]" +word = @elemsKey +byte[t_keypad] = 'L', 30, 16, "[(L)G2]" +word = @elemsKey +byte[t_keypad] = 'E', 30, 18, "[(E)^X]" +word = @elemsKey +byte[t_keypad] = 'N', 30, 20, "[L(N)X]" +word = @elemsKey +byte = 0 // // Utility routines // def repc(rep, c)#0 - while rep > 0 - putc(c) - rep-- - loop + while rep > 0 + putc(c) + rep-- + loop end def rect(x, y, width, height, frame, title)#0 - byte i + byte i - conio:gotoxy(x + 1, y) - repc(width - 2, frame ?? '#' :: '-') - conio:gotoxy(x + 1, y + height - 1) - repc(width - 2, frame ?? '#' :: '-') - for i = 1 to height - 1 - conio:gotoxy(x, y + i) - putc(frame ?? '#' :: '!') - conio:gotoxy(x + width - 1, y + i) - putc(frame ?? '#' :: '!') - next - conio:gotoxy(x, y) - putc(frame ?? '/' :: '+') - conio:gotoxy(x + width - 1, y) - putc(frame ?? '\\' :: '+') - conio:gotoxy(x, y + height - 1) - putc(frame ?? '\\' :: '+') - conio:gotoxy(x + width - 1, y + height - 1) - putc(frame ?? '/' :: '+') - if title - conio:gotoxy(x + (width - ^title) / 2, y) - puts(title) - fin + conio:gotoxy(x + 1, y) + repc(width - 2, frame ?? '#' :: '-') + conio:gotoxy(x + 1, y + height - 1) + repc(width - 2, frame ?? '#' :: '-') + for i = 1 to height - 1 + conio:gotoxy(x, y + i) + putc(frame ?? '#' :: '!') + conio:gotoxy(x + width - 1, y + i) + putc(frame ?? '#' :: '!') + next + conio:gotoxy(x, y) + putc(frame ?? '/' :: '+') + conio:gotoxy(x + width - 1, y) + putc(frame ?? '\\' :: '+') + conio:gotoxy(x, y + height - 1) + putc(frame ?? '\\' :: '+') + conio:gotoxy(x + width - 1, y + height - 1) + putc(frame ?? '/' :: '+') + if title + conio:gotoxy(x + (width - ^title) / 2, y) + puts(title) + fin end def showStack#0 - byte s - byte strFP[displayWidth+1] + byte s + byte strFP[displayWidth+1] - for s = 0 to 3 - fpu:storStr(@strFP, displayInt, displayFix, FPSTR_FIXED, s) - conio:gotoxy(4, 5 - s) - repc(displayWidth - strFP - 1, ' ') - puts(@strFP) - next + for s = 0 to 3 + fpu:storStr(@strFP, displayInt, displayFix, FPSTR_FIXED, s) + conio:gotoxy(4, 5 - s) + repc(displayWidth - strFP - 1, ' ') + puts(@strFP) + next end def showMem#0 - byte m - byte strFP[displayWidth+1] + byte m + byte strFP[displayWidth+1] - for m = 0 to 9 - ext2str(@memory[m*t_fpureg], @strFP, displayInt, displayFix, FPSTR_FIXED) - conio:gotoxy(23, 2 + m) - repc(displayWidth - strFP - 1, ' ') - puts(@strFP) - next + for m = 0 to 9 + ext2str(@memory[m*t_fpureg], @strFP, displayInt, displayFix, FPSTR_FIXED) + conio:gotoxy(23, 2 + m) + repc(displayWidth - strFP - 1, ' ') + puts(@strFP) + next end def showInput#0 - conio:gotoxy(2,7) - repc(17 - inputStr, ' ') - puts(@inputStr) + conio:gotoxy(2,7) + repc(17 - inputStr, ' ') + puts(@inputStr) end def showStatus(pstr)#0 - conio:gotoxy(0,23) - puts(pstr) + conio:gotoxy(0,23) + puts(pstr) end def clearStatus#0 - conio:gotoxy(0,23) - repc(39, ' ') + conio:gotoxy(0,23) + repc(39, ' ') end def initInput#0 - inputStr = 0 + inputStr = 0 end def updateInput#0 - // - // Lift stack if something input - // - if inputStr - fpu:pushStr(@inputStr) - fin - initInput - showInput + // + // Lift stack if something input + // + if inputStr + fpu:pushStr(@inputStr) + fin + initInput + showInput end def initDisplay#0 - byte i - word pkeys + byte i + word pkeys - conio:home() - rect(0, 0, 40, 23, 1, "") - rect(1, 1, 19, 6, 0, ":Stack:") - rect(1, 6, 19, 3, 0, 0) - conio:gotoxy(2, 2); puts("T:") - conio:gotoxy(2, 3); puts("Z:") - conio:gotoxy(2, 4); puts("Y:") - conio:gotoxy(2, 5); puts("X:") - rect(20, 1, 19, 12, 0, ":Memory:") - for i = 0 to 9 - conio:gotoxy(21, 2 + i); puti(i); putc(':') - next - pkeys = @keypad - while ^pkeys - conio:gotoxy(pkeys->xpos, pkeys->ypos) - puts(pkeys + keystr) - pkeys = pkeys + t_keyinput - loop + conio:home() + rect(0, 0, 40, 23, 1, "") + rect(1, 1, 19, 6, 0, ":Stack:") + rect(1, 6, 19, 3, 0, 0) + conio:gotoxy(2, 2); puts("T:") + conio:gotoxy(2, 3); puts("Z:") + conio:gotoxy(2, 4); puts("Y:") + conio:gotoxy(2, 5); puts("X:") + rect(20, 1, 19, 12, 0, ":Memory:") + for i = 0 to 9 + conio:gotoxy(21, 2 + i); puti(i); putc(':') + next + pkeys = @keypad + while ^pkeys + conio:gotoxy(pkeys->xpos, pkeys->ypos) + puts(pkeys + keystr) + pkeys = pkeys + t_keyinput + loop end def initState#0 - byte m + byte m - // - // Init FPU - // - fpu:reset() - // - // Fill memory - // - for m = 2 to 9 - fpu:storExt(@memory[m*t_fpureg], X_REG) - next - // - // Put some useful constants in there - // - fpu:constPi() - fpu:pullExt(@memory[0*t_fpureg]) - fpu:constE() - fpu:pullExt(@memory[1*t_fpureg]) + // + // Init FPU + // + fpu:reset() + // + // Fill memory + // + for m = 2 to 9 + fpu:storExt(@memory[m*t_fpureg], X_REG) + next + // + // Put some useful constants in there + // + fpu:constPi() + fpu:pullExt(@memory[0*t_fpureg]) + fpu:constE() + fpu:pullExt(@memory[1*t_fpureg]) end // // Keypress input handlers // def delKey(pkey)#0 - if inputStr - inputStr-- - fin - if inputStr:0 == 1 | ('-' << 8) //inputStr == 1 and inputStr.1 == '-' - inputStr-- - fin - showInput + if inputStr + inputStr-- + fin + if inputStr:0 == 1 | ('-' << 8) //inputStr == 1 and inputStr.1 == '-' + inputStr-- + fin + showInput end def dropKey(pkey)#0 - fpu:pullStr(@inputStr, displayInt, displayFix, FPSTR_STRIP|FPSTR_FLOAT) - if inputStr.1 == ' ' - inputStr-- - memcpy(@inputStr.1, @inputStr.2, inputStr) - fin - showInput - showStack + fpu:pullStr(@inputStr, displayInt, displayFix, FPSTR_STRIP|FPSTR_FLOAT) + if inputStr.1 == ' ' + inputStr-- + memcpy(@inputStr.1, @inputStr.2, inputStr) + fin + showInput + showStack end def copyKey(pkey)#0 - fpu:storStr(@inputStr, displayInt, displayFix, FPSTR_STRIP|FPSTR_FLOAT, X_REG) - if inputStr.1 == ' ' - inputStr-- - memcpy(@inputStr.1, @inputStr.2, inputStr) - fin - showInput + fpu:storStr(@inputStr, displayInt, displayFix, FPSTR_STRIP|FPSTR_FLOAT, X_REG) + if inputStr.1 == ' ' + inputStr-- + memcpy(@inputStr.1, @inputStr.2, inputStr) + fin + showInput end def clearKey(pkey)#0 - initInput - showInput + initInput + showInput end def digitKey(pkey)#0 - if inputStr < inputLen - if inputStr:0 <> ZEROSTR - inputStr++ - fin - inputStr[inputStr] = ^pkey - showInput + if inputStr < inputLen + if inputStr:0 <> ZEROSTR + inputStr++ fin + inputStr[inputStr] = ^pkey + showInput + fin end def pointKey(pkey)#0 - byte c + byte c - if !inputStr - // - // Start off with '0' if blank input - // - inputStr:0 = ZEROSTR - else - // - // Check for existing decimal point - // - for c = 1 to inputStr - if inputStr[c] == '.' - return - fin - next - fin - inputStr++ - inputStr[inputStr] = '.' - showInput + if !inputStr + // + // Start off with '0' if blank input + // + inputStr:0 = ZEROSTR + else + // + // Check for existing decimal point + // + for c = 1 to inputStr + if inputStr[c] == '.' + return + fin + next + fin + inputStr++ + inputStr[inputStr] = '.' + showInput end def chsKey(pkey)#0 - if inputStr - if inputStr.1 <> '-' - memcpy(@inputStr.2, @inputStr.1, inputStr) - inputStr++ - inputStr.1 = '-' - else - inputStr-- - memcpy(@inputStr.1, @inputStr.2, inputStr) - fin - showInput + if inputStr + if inputStr.1 <> '-' + memcpy(@inputStr.2, @inputStr.1, inputStr) + inputStr++ + inputStr.1 = '-' + else + inputStr-- + memcpy(@inputStr.1, @inputStr.2, inputStr) fin + showInput + fin end def enterKey(pkey)#0 - fpu:pushStr(@inputStr) - showStack - initInput - showInput + fpu:pushStr(@inputStr) + showStack + initInput + showInput end def opKey(pkey)#0 - updateInput - when ^pkey - is '+' - fpu:addXY() - break - is '-' - fpu:subXY() - break - is '*' - fpu:mulXY() - break - is '/' - fpu:divXY() - break - is 'R' - fpu:sqrtX() - break - wend - showStack + updateInput + when ^pkey + is '+' + fpu:addXY() + break + is '-' + fpu:subXY() + break + is '*' + fpu:mulXY() + break + is '/' + fpu:divXY() + break + is 'R' + fpu:sqrtX() + break + wend + showStack end def memKey(pkey)#0 - word r + word r - showStatus("Press 0-9 for memory register:") - r = getc - '0' - clearStatus - if r >= 0 and r <= 9 - if ^pkey == '<' - fpu:pushExt(@memory[r*t_fpureg]) - showStack - else - fpu:storExt(@memory[r*t_fpureg], X_REG) - showMem - fin + showStatus("Press 0-9 for memory register:") + r = getc - '0' + clearStatus + if r >= 0 and r <= 9 + if ^pkey == '<' + fpu:pushExt(@memory[r*t_fpureg]) + showStack + else + fpu:storExt(@memory[r*t_fpureg], X_REG) + showMem fin + fin end def elemsKey(pkey)#0 - updateInput - when ^pkey - is 'C' - fpu:cosX() - break - is 'S' - fpu:sinX() - break - is 'T' - fpu:tanX() - break - is 'A' - fpu:atanX() - break - is '^' - fpu:powXY() - break - is 'L' - fpu:log2X() - break - is 'E' - fpu:powEX() - break - is 'N' - fpu:lnX() - break - wend - showStack + updateInput + when ^pkey + is 'C' + fpu:cosX() + break + is 'S' + fpu:sinX() + break + is 'T' + fpu:tanX() + break + is 'A' + fpu:atanX() + break + is '^' + fpu:powXY() + break + is 'L' + fpu:log2X() + break + is 'E' + fpu:powEX() + break + is 'N' + fpu:lnX() + break + wend + showStack end // // Command line handler // def cmdKey(pkey)#0 -// word cmdLine +// word cmdLine -// showStatus("Command") -// cmdLine = gets(':'|$80) - word d +// showStatus("Command") +// cmdLine = gets(':'|$80) + word d - showStatus("Press 1-9 for fix point digits(Q=Quit):") - d = toupper(getc) - '0' - if d >= 1 and d <= 9 - displayFix = d - displayInt = displayWidth - displayFix - 1 - elsif d == 'Q' - '0' - quit = TRUE - fin - clearStatus - // - // Do something - // - initDisplay - showStack - showMem - showInput + showStatus("Press 1-9 for fix point digits(Q=Quit):") + d = toupper(getc) - '0' + if d >= 1 and d <= 9 + displayFix = d + displayInt = displayWidth - displayFix - 1 + elsif d == 'Q' - '0' + quit = TRUE + fin + clearStatus + // + // Do something + // + initDisplay + showStack + showMem + showInput end // // Keypress handler // def inputKey#0 - byte inkey - word pkeys - - while not quit - pkeys = @keypad - conio:gotoxy(18, 7) - inkey = toupper(getc) - while ^pkeys - if inkey == ^pkeys - conio:texttype(INVERSE) - conio:gotoxy(pkeys->xpos, pkeys->ypos) - puts(pkeys + keystr) - conio:texttype(NORMAL) - pkeys=>phandler(pkeys)#0 - conio:gotoxy(pkeys->xpos, pkeys->ypos) - puts(pkeys + keystr) - break - fin - pkeys = pkeys + t_keyinput - loop + byte inkey + word pkeys + + conio:echo(ECHO_OFF) + while not quit + pkeys = @keypad + conio:gotoxy(18, 7) + inkey = toupper(getc) + while ^pkeys + if inkey == ^pkeys + conio:texttype(INVERSE) + conio:gotoxy(pkeys->xpos, pkeys->ypos) + puts(pkeys + keystr) + conio:texttype(NORMAL) + pkeys=>phandler(pkeys)#0 + conio:gotoxy(pkeys->xpos, pkeys->ypos) + puts(pkeys + keystr) + break + fin + pkeys = pkeys + t_keyinput loop + loop + conio:echo(ECHO_ON) end initDisplay initState From 9b7ecaf8e64a102260b3a4e73051a1a5d9df5b32 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 09:49:48 -0800 Subject: [PATCH 27/40] Synch Apple 1 CMD to A2 and A3 --- src/vmsrc/a1cmd.pla | 230 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 198 insertions(+), 32 deletions(-) diff --git a/src/vmsrc/a1cmd.pla b/src/vmsrc/a1cmd.pla index bae391d..6ecf924 100755 --- a/src/vmsrc/a1cmd.pla +++ b/src/vmsrc/a1cmd.pla @@ -550,6 +550,176 @@ asm lookuptbl(dci, tbl)#1 INC DSTH BNE -- end +// def lookupidx(esd, index) +// word sym +// while ^esd +// sym = esd +// esd = sym + dcitos(sym, @str) +// if esd->0 & $10 and esd->1 == index +// return sym +// fin +// esd = esd + 3 +// loop +//end +asm lookupidx(esd, index)#1 + LDA ESTKL,X + STA TMPL + INX +--- LDA ESTKH,X + STA SRCH + LDA ESTKL,X +-- STA SRCL + LDY #$00 +- LDA (SRC),Y + BPL + + INY + BNE - ++ BEQ ++ ; END OF ESD + INY + LDA (SRC),Y + INY + AND #$10 ; EXTERN FLAG? + BEQ + + LDA (SRC),Y + CMP TMPL + BEQ +++ ; MATCH ++ INY + TYA + SEC + ADC SRCL + STA ESTKL,X ; SYM PTRL + BCC -- + INC ESTKH,X ; SYM PTRH + BNE --- +++ STA ESTKL,X ; END OF ESD + STA ESTKH,X ++++ RTS +end +//def lookupdef(addr, deftbl)#1 +// while deftbl->0 == $20 +// if deftbl=>3 == addr +// return deftbl +// fin +// deftbl = deftbl + 5 +// loop +// return 0 +//end +asm lookupdef(addr, deftbl)#1 + LDA ESTKH,X + STA SRCH + LDA ESTKL,X + STA SRCL + INX +- LDY #$00 + LDA (SRC),Y + CMP #$20 ; JSR OPCODE? + BNE ++ + LDY #$03 + LDA (SRC),Y + CMP ESTKL,X + BNE + + INY + LDA (SRC),Y + CMP ESTKH,X + BNE + + LDA SRCL ; MATCH + STA ESTKL,X + LDA SRCH + STA ESTKH,X + RTS ++ LDA #$05 + CLC + ADC SRCL + STA SRCL + BCC - + INC SRCH + BNE - +++ STY ESTKL,X + STY ESTKH,X + RTS +end +// +// Reloc internal data +// +//def reloc(modfix, modofst, bytecode, rld)#3 +// word addr, fixup +// while ^rld +// if ^rld & $10 // EXTERN reference. +// return rld, addr, fixup +// fin +// addr = rld=>1 + modfix +// fixup = *addr + modofst +// if uword_isge(fixup, bytecode) // Bytecode address. +// return rld, addr, fixup +// fin +// *addr = fixup +// rld = rld + 4 +// loop +// return rld, addr, fixup +//end +asm reloc(modfix, modofst, bytecode, rld)#3 + LDA ESTKL,X + STA SRCL + LDA ESTKH,X + STA SRCH + LDY #$00 +- LDA (SRC),Y + BEQ RLDEX ; END OF RLD + PHA + INY + LDA (SRC),Y + INY + CLC + ADC ESTKL+3,X ; ADDR=ENTRY=>1+MODFIX + STA DSTL + LDA (SRC),Y + ADC ESTKH+3,X + STA DSTH + PLA + AND #$10 ; EXTERN REF - EXIT + BNE RLDEX + TAY ; FIXUP=*ADDR+MODOFST + LDA (DST),Y + INY + CLC + ADC ESTKL+2,X + STA TMPL + LDA (DST),Y + ADC ESTKH+2,X + CMP ESTKH+1,X ; FIXUP >= BYTECODE? + BCC + + STA TMPH + BNE RLDEX ; YEP, EXIT + LDA TMPL + CMP ESTKL+1,X + BCS RLDEX ; YEP, EXIT + LDA TMPH ++ STA (DST),Y ; *ADDR=FIXUP + DEY + LDA TMPL + STA (DST),Y + LDA SRCL ; NEXT ENTRY +; CLC + ADC #$04 + STA SRCL + BCC - + INC SRCH + BNE - +RLDEX INX + LDA TMPL + STA ESTKL,X + LDA TMPH + STA ESTKH,X + LDA DSTL + STA ESTKL+1,X + LDA DSTH + STA ESTKH+1,X + LDA SRCL + STA ESTKL+2,X + LDA SRCH + STA ESTKH+2,X + RTS +end // // CONSOLE I/O // @@ -769,15 +939,6 @@ def adddef(addr, deflast)#1 defentry->5 = 0 // null out next entry return defentry end -def lookupdef(addr, deftbl)#1 - while deftbl->0 == $20 - if deftbl=>3 == addr - return deftbl - fin - deftbl = deftbl + 5 - loop - return 0 -end def loadmod(mod)#1 word rdlen, modsize, bytecode, defofst, defcnt, init, fixup word addr, modaddr, modfix, modofst, modend @@ -871,31 +1032,36 @@ def loadmod(mod)#1 // Run through the Re-Location Dictionary. // while ^rld - addr = rld=>1 + modfix + rld, addr, fixup = reloc(modfix, modofst, bytecode, rld) + if ^rld + *addr = ^rld & $10 ?? *addr + lookupextern(esd, rld->3) :: lookupdef(fixup + defofst, deftbl) + rld = rld + 4 + fin + //addr = rld=>1 + modfix //if uword_isge(addr, modaddr) // Skip fixups to header - //if type & $80 // WORD sized fixup. - fixup = *addr - //else // BYTE sized fixup. - // fixup = ^addr - //fin - if ^rld & $10 // EXTERN reference. - fixup = fixup + lookupextern(esd, rld->3) - else // INTERN fixup. - fixup = fixup + modofst - if uword_isge(fixup, bytecode) - // - // Bytecode address - replace with call def directory. - // - fixup = lookupdef(fixup + defofst, deftbl) - fin - fin - //if type & $80 // WORD sized fixup. - *addr = fixup - //else // BYTE sized fixup. - // ^addr = fixup - //fin + // if type & $80 // WORD sized fixup. + // fixup = *addr + // else // BYTE sized fixup. + // fixup = ^addr + // fin + // if ^rld & $10 // EXTERN reference. + // fixup = fixup + lookupextern(esd, rld->3) + // else // INTERN fixup. + // fixup = fixup + modofst + // if uword_isge(fixup, bytecode) + // // + // // Bytecode address - replace with call def directory. + // // + // fixup = lookupdef(fixup + defofst, deftbl) + // fin + // fin + // if type & $80 // WORD sized fixup. + // *addr = fixup + // else // BYTE sized fixup. + // ^addr = fixup + // fin //fin - rld = rld + 4 + //rld = rld + 4 loop // // Run through the External/Entry Symbol Directory. From 75499af5d57a7bc44bea7c3221db26aa1d14ccd5 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 10:07:28 -0800 Subject: [PATCH 28/40] Clear screen on Apple /// grmode --- src/libsrc/conio.pla | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libsrc/conio.pla b/src/libsrc/conio.pla index 363d7eb..f851d58 100644 --- a/src/libsrc/conio.pla +++ b/src/libsrc/conio.pla @@ -359,6 +359,7 @@ def a3grmode(mix) puts(@textclrmode) dev_control(cmdsys.devcons, 17, @grcharset) a3viewport(0, 20, 40, 4) + putc(28) for i = 0 to mix memset(txt1scrn[i], $0000, 40) // text screen memset(txt2scrn[i], $0000, 40) // color screen From 31f9a207b2321dd81759de9d10eb9c7d9e1f6618 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 10:32:52 -0800 Subject: [PATCH 29/40] Fix speaker octave settings --- src/libsrc/sndseq.pla | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/libsrc/sndseq.pla b/src/libsrc/sndseq.pla index c60cb9a..7d6222c 100755 --- a/src/libsrc/sndseq.pla +++ b/src/libsrc/sndseq.pla @@ -371,7 +371,7 @@ def mbTicklePSG(pVIA) return 0 end def mbSearch(slot) - if MACHID <> $F2 and slot >= 0 and slot <= 7// Apple 3 + if slot >= 0 and slot <= 7 if slot mbVIA1 = mbTicklePSG($C000 + (slot << 8)) if mbVIA1 @@ -807,16 +807,16 @@ when MACHID & MACHID_MODEL if ^instr mbSlot = mbSearch(^(instr + 1) - '0') fin - if mbSlot < 0 - // - // No MockingBoard - scale octave0 for speaker - // - for instr = 0 to 11 - spkrOctave0[instr] = mbOctave0[instr]/NOTEDIV - next - fin break wend +if mbSlot < 0 + // + // No MockingBoard - scale octave0 for speaker + // + for instr = 0 to 11 + spkrOctave0[instr] = mbOctave0[instr]/NOTEDIV + next +fin done From 6a5df01a07aa88ece10a46ff8883e70c9be61e9c Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 10:57:17 -0800 Subject: [PATCH 30/40] Spell MockingBoard right --- src/libsrc/sndseq.pla | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsrc/sndseq.pla b/src/libsrc/sndseq.pla index 7d6222c..1989cd0 100755 --- a/src/libsrc/sndseq.pla +++ b/src/libsrc/sndseq.pla @@ -799,7 +799,7 @@ when MACHID & MACHID_MODEL return -1 break otherwise - puts("MockingBoars Slot:\n") + puts("MockingBoard Slot:\n") puts("ENTER = None\n") puts("0 = Scan\n") puts("1-7 = Slot #\n") From 704df0cb4c9df7ce798b4b93331eb9e03352e453 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 11:37:49 -0800 Subject: [PATCH 31/40] Update images --- PLASMA-BLD1.PO | Bin 143360 -> 143360 bytes PLASMA-DEM1.PO | Bin 143360 -> 143360 bytes PLASMA-SOS1.PO | Bin 0 -> 143360 bytes PLASMA-SYS1.PO | Bin 0 -> 143360 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 PLASMA-SOS1.PO create mode 100644 PLASMA-SYS1.PO diff --git a/PLASMA-BLD1.PO b/PLASMA-BLD1.PO index 2adf3682e82ca8e4cc6ce5d96b8815453f1b5172..fcc08ee68d32be716f255145e46a9e89db11de9d 100644 GIT binary patch literal 143360 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

Zn?3gX$907&eebx8}ky!>KRtcIu%HsywzP zM=4n~<4FnsSx)OhguY^9x1M=FJG=JG_#+n|ntsjbQ?HyK|MF9lTj=LsYrQx=VL;SfdA6r?|qj4P5!%olT(YFFRsenjr7-7-N*6n{hOTQf0IL7 zeoRBJzsVW;gB2&bYUteDd1nLVXr@?bF7bqFzNz*6gzmZmr{`1Sf+)rmsseg3# z-B}~cP4#~$w#>?ZKc|?z8fWA#WBua6w0(6#*0#2X@0s{PY`d}ky$1wrkEx7S@S)Zk�M@6s~*_2 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 diff --git a/PLASMA-PRE2.PO b/PLASMA-PRE2.PO deleted file mode 100644 index 1db17090dc2fc33c882a2c660d88554e42b4ca38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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 diff --git a/PLASMA-PRE3.PO b/PLASMA-PRE3.PO deleted file mode 100644 index 04a0bd3729d9b43cfcc64a911ccc7e780c9cdd98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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 /HARDISK/PLASMA.PRE3/ +PLASMA can be run from floppies, System in Drive 1, and Build or Demos in Drive 2. Mass storage is the recommended installation that looks like (replacing HARDISK with your volume name of choice): -Build Files => /HARDISK/BLD/ +System Files => /HARDISK/PLASMA/ -Demo Files => /HARDISK/DEMOS/ +Build Files => /HARDISK/PLASMA/BLD/ -Keeping the system files seperate from the build directory will make upgrading to the final 1.0 Release later a little easier. To boot directly into PLASMA, you will need to put the system files in the root prefix of the boot device and make sure PLASMA.SYSTEM is the first SYSTEM file in the directory. Otherwise, start PLASMA.SYSTEM from your program launcher of choice. +Demo Files => /HARDISK/PLASMA/DEMOS/ -## 65802/65816 Support +Use the System Utilities to copy the floppy images into the above mentioned directories. + +## Apple 1 + +The Apple 1 is a very constrained system compared to the ][ and ///. It is required to have the CFFA1 disk adapter installed to provide file storage and a full 32K od RAM. To get the files onto the CF card required the use of [CiderPress](http://a2ciderpress.com) and they must be placed in one directory. Most PLASMA programs won't work on the Apple 1 due to limited filesystem support, video/graphics capabilities, and lack of audio output. It does, however, make a good place to start when porting PLASMA to a new platform. + +## Apple ][ + +To boot directly into PLASMA, you will need to put the system files in the root prefix of the boot device and make sure PLASMA.SYSTEM is the first SYSTEM file in the directory. Otherwise, start PLASMA.SYSTEM from your program launcher of choice. All Apple ][ models with 64K and two floppy drives are supported up to a maxed out IIGS with accelerator and hard drive. + +#### 65802/65816 Support PLASMA can utilize the 16 bit features of the 65802 and 65816 processors to improve performance of the PLASMA VM operation. This is transparent to the programmer/user and doesn't make any additional memory or capabilities available to PLASMA. Launch `PLASMA16.SYSTEM` to use the 16 bit PLASMA VM. If you don't have the right CPU, it will print a message and restart. +## Apple /// + +The Apple /// gets the environment it always wanted: The ability to navigate the filesystem with a command line interface. The Apple /// always boots from the floppy drive, even if a hard disk is installed. The PLASMA.SOS floppy should be updated with the SOS.DRIVER configured for your machine. Once booted, type `S /HARDISK/PLASMA` (or your install directory of choice) to change to, and set, the system directory. This can be automated by creating an `AUTORUN` file on the boot floppy with the above command in it. + ## PLASMA Command Line Shell -PLASMA incorporates a very basic command line shell to facilitate navigating the filesystem and executing both SYSTEM programs and PLASMA modules. It has a few built-in commands: +PLASMA incorporates a very basic command line shell to facilitate navigating the filesystem and executing both SYSTEM/SOS programs and PLASMA modules. It has a few built-in commands: | Command | Operation | |:----------------------------:|-------------------------| @@ -34,23 +48,27 @@ PLASMA incorporates a very basic command line shell to facilitate navigating the | P \ | change to Prefix | / | change to parent prefix | V | show online Volumes -| -\ [PARAMS] | launch SYSTEM program +| S \ | set System prefix* +| +SOS \ [PREFIX] | launch SOS interpreter* +| -\ [PARAMS] | launch SYSTEM program** | +\ [PARAMS] | exec PLASMA module ``` [Optional parameters] +* Apple /// only +** Apple ][ only ``` The shell is very brief with error messages. It is meant solely as a way to run programs that accept command line parameters and take up as little memory as possible. It does, however, provide a rich runtime for PLASMA modules. ## Included Modules -The Developers Preview comes with a basic set of system modules. When PLASMA is launched, the SYS/ directory immediately below where PLASMA.SYSTEM was launched contains the modules. The system volume (where PLASMA was started) must remain in place for the duration of PLASMAs run. Otherwise it won't be able to find CMD or the system libraries. Probably the most useful included module is the editor. It is used for editing PLASMA source file, assembly source files, or any ProDOS text file. Execute it with: +PLASMA comes with many library modules used by the tools, demos and sample code. The PLASMA system volume must remain in place for the duration of PLASMAs run otherwise it won't be able to find CMD or the system libraries. Probably the most useful included module is the editor. It is used for editing PLASMA source file, assembly source files, or any text file. Execute it with: ``` +ED [TEXT FILE] ``` -### Compiler Modules +## Compiler Modules The build disk includes sample source, include files for the system modules, and the PLASMA compiler+optimizer modules. The compiler is invoked with: ``` @@ -58,13 +76,17 @@ The build disk includes sample source, include files for the system modules, and ``` Compiler warnings are enabled with `-W`. The optional optimizer is enabled with `-O` and extra optimizations are enabled with `-O2`. The source code for a few sample programs are included. The big one, `RPNCALC.PLA`, is the sample RPN calculator that uses many of PLASMA's advanced features. The self-hosted compiler is the same compiler as the cross-compiler, just transcribed from C to PLASMA (yes, the self-hosted PLASMA compiler is written in PLASMA). It requires patience when compiling: it is a fairly large and extensive program. -### Demos +## Demos -There are some demo programs included for your perusal. Check out `ROGUE` for some diversion. You can find the documentation here: https://github.com/dschmenk/PLASMA/blob/master/doc/Rogue%20Instructions.md. A music sequencer to play through a MockingBoard if it is detected, or the built-in speaker if not. There may be problems if there is a CP/M card present when detecting the MockingBoard. A minimal Web server if you have an Uthernet2 card (required). Bug reports appreciated. +There are some demo programs included for your perusal. Check out `ROGUE` for some diversion. You can find the documentation here: https://github.com/dschmenk/PLASMA/blob/master/doc/Rogue%20Instructions.md. A music sequencer to play through a MockingBoard if it is detected, or the built-in speaker if not. A minimal Web server if you have an Uthernet2 card (required). Bug reports appreciated. ## Source Code -This is a Developers Preview, all sample source code is included from the project. It builds without alteration and should be a good starting point for further explorations. The header files for the included library modules are in the INC directory. Previously, examples from the sandbox were included but they have been removed to make room for all the project samples and include files. +Most sample source code is included from the project. They build without alteration and should be a good starting point for further explorations. The header files for the included library modules are in the INC directory. + +## Video Playlist + +There is a [YouTube playlist](https://www.youtube.com/playlist?list=PLlPKgUMQbJ79VJvZRfv1CJQf4SP2Gw3yU) created for learning PLASMA. It is a WIP, with updates every week or so ## Issues @@ -72,6 +94,8 @@ This is a Developers Preview, all sample source code is included from the projec - All the project modules are included. They have been tested, with the exception of the Uthernet2 driver. I seem to have misplaced mine. If someone can try the Web Server demo in /PLASMA.DEMOS/NET and leave feedback would be very appreciated. +- The Apple /// may not always report errors properly or at all. + - The documentation is sparse and incomplete. Yep, could use your help... # Changes in PLASMA for 1.0 From b986e1da38026ca93fba4b4de57a80f7c5a286ee Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 7 Feb 2018 12:01:55 -0800 Subject: [PATCH 33/40] PLASM compiler patch #1 --- PLASMA-BLD1.PO | Bin 143360 -> 143360 bytes src/toolsrc/codegen.c | 8 ++++++++ src/toolsrc/parse.c | 9 +++++++-- src/toolsrc/parse.pla | 8 ++++++-- src/toolsrc/plasm.pla | 2 +- src/toolsrc/symbols.h | 2 ++ 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/PLASMA-BLD1.PO b/PLASMA-BLD1.PO index fcc08ee68d32be716f255145e46a9e89db11de9d..698488ed3f536cb780d82c682e1b755c5fdc1aea 100644 GIT binary patch delta 1605 zcmXxje@xVM9LMp`=Qs={ zqHH?mS0kG9N6jMC>Ac+*HcXPTIV>t78Dgen$#kPsn&Tqr`A>g5zVFxj_5JL7e|+!T zdOf1`dc^5(!ed4&MPb^4d5gtwg5Zn{UJlPV8~K%Ps$q|RUMvho_UA5>MM3>eWwb2W ze=xKpJzdla`*LAU@K{M1F$tdeqJB8GHp=81jxC)>R~sd~11Z6w&_`0<4(^!wKuSw6 z>ft$)v~+wcdu`KeJadJ&F)O?D?^)rs6#c(V&3a>#y@AdyDXXm3Qjfdr8MpnZrp9e` z4K>Zn?Hg*Ex7RhjY|qKe&gn@t$um;!?Hmh}8lpjepp z_E_i0-SPgPR|qwRKX4Zz#5sgoj0|LB1>9JNYSf__El}8l4jjM{bR&Q-@Fi|y65%U_ zia-LAU|%WxDwp6uJ_=EW4X8vl8qkCmyo(RfjgttX5B<1``!-Zn3NBL^r ze0>GDb0u3H*s^%wX2fB}o&8 zQ!^WymSVUyt18g=5>Si^Jcnw|Y}OKu*T{afVHe$}npqtupF#k=IFGM!5rdo=(h}7e z`37!c0+aOj=>7k&NS9D%L?FQ>j3k#;EhMKP4NK`VT=6QCnZvzYItMhk=?b`4OkPKR zmRwHWh)Qh1R=k3pcpWWxi?i*nc)!}m(!p}rWm89)UCiTjr^!9!v*bSX;{x4)Yrgu9 z`2+h;7{L`>qx+qE6U;lVRCSkbiu}N3Gop2~iqrW_bzv;f!wribrflR?z0jtX60&rg z%4Is3P7bBLO$~% delta 1553 zcmXxhe@xVM9LMp`=X+lir09sC+mJisS0GKv$isvCe!olRVHAm7%Sq~X8@DVSt7+3^ zef_x9mOsXK?8IBmWiC>xWnFn{4hLyJ$VFodHCo9^XTUp?&GauN$ISt67jS6FC>OD=AO##v9vZJLV2r&mdNg}sg%_TYrORi z>F<1Fs@&}sQE{JJzpHtsh~6HK6(p`q9h7n?v3q*IlzO7Hm zzk1nUX%W^N|DPt(;apER-qkDR8d=ok)#U7CohFY_i9RcpHat z4#T*L>zGCwnYBXAhObuGs+2Gvbuh3PjR@mOMDZM6MF(Pd9q*tAXE1^>jAIfvAr=Xh z4-YC4fQcrA5kYj3EmS+H{HV=ihC zgcT6Zih!=3BCkON&)6*M@d94KPV9w)7!IHZ2^_;|e1KL19rf{`#6QuID@Y+hzs}uKj9Z##dS<04OdX8+fa&o@c;q{ zVlhHN-v433qgak7uo9~f!PD4`EwHg2yU>X^-ozms!BHfT#7Xp`4+HoX=P`;gTt+%5 zoMPM1oid}ysW7~%$`EQE7QjFQLWXdfjC^MmIf`{?r`v1j$|1+FA8+9>-o*#_ggYmU zeAQ3>5?^Bw-_c*BPmzCvJyXR=` Fe*v1d;^+VX diff --git a/src/toolsrc/codegen.c b/src/toolsrc/codegen.c index c8eb630..1ceb4f6 100755 --- a/src/toolsrc/codegen.c +++ b/src/toolsrc/codegen.c @@ -232,6 +232,14 @@ void idglobal_size(int type, int size, int constsize) else if (size) emit_data(0, 0, 0, size); } +void idlocal_size(int size) +{ + localsize += size; + if (localsize > 255) + { + parse_error("Local variable size overflow\n"); + } +} int id_tag(char *name, int len) { int i; diff --git a/src/toolsrc/parse.c b/src/toolsrc/parse.c index 6188e7e..e10561f 100755 --- a/src/toolsrc/parse.c +++ b/src/toolsrc/parse.c @@ -1170,8 +1170,13 @@ int parse_var(int type, long basesize) { if (idlen) id_add(idstr, idlen, type, size); - else - emit_data(0, 0, 0, size); + else if (!(type & EXTERN_TYPE)) + { + if (type & LOCAL_TYPE) + idlocal_size(size); + else + emit_data(0, 0, 0, size); + } } return (1); } diff --git a/src/toolsrc/parse.pla b/src/toolsrc/parse.pla index dd81daa..e5f8588 100644 --- a/src/toolsrc/parse.pla +++ b/src/toolsrc/parse.pla @@ -941,8 +941,12 @@ def parse_var(type, basesize)#0 else new_iddata(idptr, idlen, type, size) fin - elsif not (type & (EXTERN_TYPE|LOCAL_TYPE)) - emit_fill(size) + elsif not type & EXTERN_TYPE + if type & LOCAL_TYPE + framesize = framesize + size + else + size_iddata(type, size, 0) + fin fin fin end diff --git a/src/toolsrc/plasm.pla b/src/toolsrc/plasm.pla index 42fd156..eeb5ffb 100644 --- a/src/toolsrc/plasm.pla +++ b/src/toolsrc/plasm.pla @@ -411,7 +411,7 @@ include "toolsrc/parse.pla" // // Look at command line arguments and compile module // -puts("PLASMA Compiler, Version 1.0\n") +puts("PLASMA Compiler, Version 1.01\n") arg = argNext(argFirst) if ^arg and ^(arg + 1) == '-' opt = arg + 2 diff --git a/src/toolsrc/symbols.h b/src/toolsrc/symbols.h index 4fc90ce..9eb8cb6 100755 --- a/src/toolsrc/symbols.h +++ b/src/toolsrc/symbols.h @@ -46,4 +46,6 @@ int id_tag(char *name, int len); int id_const(char *name, int len); int id_type(char *name, int len); void idglobal_size(int type, int size, int constsize); +void idlocal_size(int size); +void idlocal_size(int size); int tag_new(int type); From 7af5d53fbb021c0dabde732e34fd12fbd4c04196 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 8 Feb 2018 18:46:50 -0800 Subject: [PATCH 34/40] Allow Apple3 heap allocator to skip graphics memory --- src/vmsrc/plvm03.s | 32 +++++++++--------- src/vmsrc/soscmd.pla | 77 +++++++++++++++++++------------------------- 2 files changed, 48 insertions(+), 61 deletions(-) diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index f1ccde9..e342402 100755 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -62,8 +62,6 @@ SEGSTART = $A000 BPL - LDX #$4C ; SET JMPTMP OPCODE STX JMPTMP -; STA JMPTMPX -; STA JMPTMPX+1 STA TMPX ; CLEAR ALL EXTENDED POINTERS STA SRCX STA DSTX @@ -201,6 +199,21 @@ _DIVEX INX LDY IPY RTS ;* +;* INCREMENT TOS +;* +INCR INC ESTKL,X + BNE + + INC ESTKH,X ++ JMP NEXTOP +;* +;* DECREMENT TOS +;* +DECR LDA ESTKL,X + BNE + + DEC ESTKH,X ++ DEC ESTKL,X + JMP NEXTOP +;* ;* OPCODE TABLE ;* !ALIGN 255,0 @@ -317,21 +330,6 @@ IDXW LDA ESTKL,X STA ESTKH+1,X JMP DROP ;* -;* INCREMENT TOS -;* -INCR INC ESTKL,X - BNE + - INC ESTKH,X -+ JMP NEXTOP -;* -;* DECREMENT TOS -;* -DECR LDA ESTKL,X - BNE + - DEC ESTKH,X -+ DEC ESTKL,X - JMP NEXTOP -;* ;* BITWISE COMPLIMENT TOS ;* COMP LDA #$FF diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index 59c7a0f..3014826 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -17,12 +17,6 @@ const resxhgr2 = $0080 const modkeep = $2000 const modinitkeep = $4000 // -// SOS flags -// -const O_READ = 1 -const O_WRITE = 2 -const O_READ_WRITE = 3 -// // Pedefined functions. // predef syscall(cmd,params)#1, call(addr,areg,xreg,yreg,status)#1 @@ -35,7 +29,7 @@ predef execmod(modfile)#1 // // Exported CMDSYS table // -word version = $0100 // 01.00 +word version = $0101 // 01.01 word syspath word cmdlnptr word = @execmod @@ -810,7 +804,7 @@ def setpfx(path)#1 perr = syscall($C6, @params) return path end -def volume(devname, volname, ttlblks, freblks)#1 +def volume(devname, volname)#1 byte params[9] params.0 = 4 @@ -819,8 +813,6 @@ def volume(devname, volname, ttlblks, freblks)#1 params:5 = 0 params:7 = 0 perr = syscall($C5, @params) - *ttlblks = params:5 - *freblks = params:7 return perr end def open(path)#1 @@ -899,18 +891,7 @@ end // // MEMORY CALLS // -def seg_request(base, limit, id)#1 - byte params[7] - - params.0 = 4 - params:1 = base - params:3 = limit - params.5 = id - params.6 = 0 - perr = syscall($40, @params) - return params.6 -end -def seg_find(search, base, limit, pages, id)#1 +def seg_find(search, pages, id)#3 byte params[10] params.0 = 6 @@ -921,9 +902,7 @@ def seg_find(search, base, limit, pages, id)#1 params:7 = 0 params.9 = 0 perr = syscall($41, @params) - *base = params:5 - *limit = params:7 - return params.9 + return params.9, params:5, params:7 end def seg_release(segnum)#1 byte params[2] @@ -943,8 +922,9 @@ def init_cons()#0 fin write(refcons, @textmode, 3) devcons = dev_getnum(@console) - nlmode.0 = $80 - nlmode.1 = $0D + nlmode:0 = $0D80 + //nlmode.0 = $80 + //nlmode.1 = $0D dev_control(devcons, $02, @nlmode) end def cout(ch)#0 @@ -955,6 +935,9 @@ def cout(ch)#0 write(refcons, @ch, 1) fin end +def crout()#0 + cout($0D) +end def cin()#1 byte ch read(refcons, @ch, 1) @@ -975,14 +958,11 @@ def rdstr(prompt)#1 cout(prompt) ^heap = read(refcons, heap + 1, 128) if heap->[^heap] == $0D - ^heap = ^heap - 1 + ^heap-- fin - cout($0D) + crout return heap end -def crout()#0 - cout($0D) -end def prbyte(v)#0 cout(hexchar[(v >> 4) & $0F]) cout(hexchar[v & $0F]) @@ -1002,6 +982,18 @@ def allocheap(size)#1 word addr addr = heap heap = heap + size + if systemflags & reshgr1 + if uword_islt(addr, $4000) and uword_isgt(heap, $2000) + addr = $4000 + heap = addr + size + fin + fin + if systemflags & reshgr2 + if uword_islt(addr, $6000) and uword_isgt(heap, $4000) + addr = $6000 + heap = addr + size + fin + fin if uword_isge(heap, @addr) return 0 fin @@ -1150,7 +1142,7 @@ def loadmod(mod)#1 // // Alloc heap space for relocated module (data + bytecode). // - moddep = moddep + 1 + moddep++ modfix = moddep - @header.2 // Adjust to skip header modsize = modsize - modfix rdlen = rdlen - modfix - 2 @@ -1181,16 +1173,16 @@ def loadmod(mod)#1 while ^esd // Scan to end of ESD esd = esd + 4 loop - esd = esd + 1 + esd++ if defcnt // // Locate bytecode defs in allocated segment. // - modseg[modid] = seg_find($00, @codeseg, @defaddr, (rld - bytecode + 255) >> 8, modid + $12) + modseg[modid], codeseg, drop = seg_find($00, (rld - bytecode + 255) >> 8, modid + $12) if perr return -perr fin - modid = modid + 1 + modid++ defext = (codeseg.0 | $80) - 1 defaddr = (codeseg & $FF00) + $6000 codefix = defaddr - bytecode @@ -1268,8 +1260,6 @@ def loadmod(mod)#1 // memxcpy(codeseg, bytecode, modsize - (bytecode - modaddr)) fin - //else - // return -perr fin if lerr return -lerr @@ -1298,12 +1288,11 @@ def volumes()#0 byte devname[17] byte volname[17] byte i - word ttlblks, freblks for i = $01 to $18 if dev_info(i, @devname, @info, 11) == 0 prstr(@devname) - if volume(@devname, @volname, @ttlblks, @freblks) == 0 + if volume(@devname, @volname) == 0 prstr(" => /") prstr(@volname) cout('/') @@ -1423,7 +1412,7 @@ def execmod(modfile)#1 lastsym = savesym heap = saveheap while modid - modid = modid - 1 + modid-- seg_release(modseg[modid]) loop else @@ -1441,11 +1430,11 @@ init_cons // // Print PLASMA version // -prstr("PLASMA "); prbyte(version.1); cout('.'); prbyte(version.0); crout +prstr("PLASMA 01.01\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout // // Init 2K symbol table. // -seg_find($00, @symtbl, @lastsym, $08, $11) +drop, symtbl, drop = seg_find($00, $08, $11) lastsym = symtbl & $FF00 xpokeb(symtbl.0, lastsym, 0) while *sysmodsym @@ -1524,7 +1513,7 @@ while 1 prbyte(terr) perr = 0 else - prstr("OK\n") + prstr("OK") fin crout() fin From 3d1d82d8fcb4df14a354a92ea79ee4eaaf7e1456 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 8 Feb 2018 18:49:23 -0800 Subject: [PATCH 35/40] Update image --- PLASMA-SOS1.PO | Bin 143360 -> 143360 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PLASMA-SOS1.PO b/PLASMA-SOS1.PO index 6b43d1d65b82f5a9d20352f062bdb385bc351a6e..f118906d926790fd87578a342d9d99f4c7d5a4a9 100644 GIT binary patch delta 2824 zcmY*beQZ@Oct;95`?OGKyslfgKX{{K7X`*N?ADfD%RrAiZ z6KE~_zH`n!AHRD(?(^g|$K*9fxli^u;r?>i9Bg&3f*SyX!5+_CO#Xen)I4WX8i@3T z;dJ#&SB$7@+F0xHrfw~M?xpWcL3(oP?9@k7H%|WZE86FbS%9m{fo3aeIxx* zdN%EwzB*k=ho>K(z71E>ci{4rH@7h@0p*?{L%E~KQx!-n@lhP{(?UU2n6^s ze0F!suYPQ$L7TsL=KW(ov))KrH|H-No0vP{`;X*!Eq}58v_0_J+*_>&C3(L!F=RCR zeO-dEIK=A$J5T<|NvJ$7bI|KJ(d$8P0KJKR9G2OB>(G!DcN%;B{+j6#zYmE+L&n?w zcBSS+iM!B;adDm3_2;mC!9+pP@eKzgUwh3(lL%v%C>bXh#s=ec^p|0R$_VF?wqUBJ z)hx8!HfkTYa~QAZ^0)&52{fQPVZ51css=#hiDur!opHA?kR>V!x8pXtrRq~)mcp5gYU*@QdohU?v@bkjNja=uXGo{1ujT|LmU}p=FIH?*-9H_Hj zZGlc_Bko_%g@F=b8FMahlHjV^)XA*kZeb=p*n6oENdQfG<5JBXdf=dN(1aC-UX5tN ze?8E~6k0!w3InPFv?ImHsR4ix^%nX?8}r<2gW#zW{yR(M(&6=VkJXV?8YN#EIWgQk`#=hL+om0_*+{wT1gO8tI?E@gzX_`BT(}|Z3KPPpvrh; zg%kX0?3U3M_`Y<@crwts?W_E#tabsHN8%Pco*%VG{Xmb1(UcK+XFftVVo{L1U&O+3 zd)xKCFe_G#Qjp<}c$D zcXYyux*M0UCR)b$Ca|V%z*?3ZFgn{?cU9p;16V_~2^Y4j5COCZv2q#P(*eUnmOFlp zhkC<37>nqk*vA#_qISE&E|f+CI#$19jFYHGfDtejqP*SS{unCwc!LIMX7}0~FXDwvO z7~*<>4h71@R%2hsV{NH&goi1H3CFHgcvw@P0p7~}+`+?auW_a$uzO>f#1!Bj-bi?W zg-&tr!9|Pt3a6Sn0G#TboGzSrlxo!BRYNFM_HjQM_3~<~xd6|z-~$iU$-Rg@vZ^hW zm>Jfp*tBZq9PE`@OsR*vRX-%Uxtl8_+`&@ioui&=hPlTr`oI&vChFY{R65W_eNU_h zCD9db!n>%6{kISeL%0c>0|kEODnyq-cU@pZU!X_G{J78_>>q5MnD(bi1kho;Tex## z^J~$12wgJ81%nkDCn9w+#GQDX+7e=%JAq&|aP3!5izyTNYe?ACV3k=#v~gKTgGkhk z3>uMO7r9?F_5^!9R*`xV4*7rs);EER2AE|`2SavjB7|aG2zFrm-wSTVb;Bc1r|zCX zFlrm(P&9Fo;~j}JB_?*x`tUl4Hgr8u*C3*J5Y zauk=#c;gJHYk;?iIbMo`j@_X809V(V*n*x!w-I29UOf66cT_UMh=S|p*oicph zM4>|a#U+os$cx#GwP4}5ZP~Uyh``tfB{o~aOpAJ>lBRwwJhA=r>}Z}o)rW5bLo^~l3}EPOkO^Hx=#dsd|3 za#4Wz^c2$cEPK9$8O7`h-*}kV7ypCZ)qhY=inSy>oc)f6)g@*xEqGX6LJvp2 Date: Fri, 9 Feb 2018 14:16:06 -0800 Subject: [PATCH 36/40] Allocate all interp bank. Check path during set_pfx --- src/vmsrc/plvm03.s | 50 +++++++++++++++++++++++++++++++------------- src/vmsrc/soscmd.pla | 44 +++++++++++++++++++------------------- 2 files changed, 57 insertions(+), 37 deletions(-) diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index e342402..bf81b6f 100755 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -42,17 +42,17 @@ DSTX = XPAGE+DSTH ;* ;* INTERPRETER HEADER+INITIALIZATION ;* -SEGSTART = $A000 +SEGSTART = $2000 *= SEGSTART-$0E !TEXT "SOS NTRP" !WORD $0000 !WORD SEGSTART !WORD SEGEND-SEGSTART - +SOS $40, SEGREQ ; ALLOCATE SEG 1 AND MAP IT - BNE FAIL ; PRHEX - LDA #$01 - STA MEMBANK +; +SOS $40, SEGREQ ; ALLOCATE SEG 1 AND MAP IT +; BNE FAIL ; PRHEX +; LDA #$00 +; STA MEMBANK LDY #$0F ; INSTALL PAGE 0 FETCHOP ROUTINE LDA #$00 - LDX PAGE0,Y @@ -67,12 +67,31 @@ SEGSTART = $A000 STA DSTX STA PPX ; INIT FRAME & POOL POINTERS STA IFPX - LDA #SEGSTART + LDA #$A0 STA PPH STA IFPH + !IF 1 { + LDA #VMCORE + STA SRCH + LDY #$00 + STY DSTL + LDA #$A0 + STA DSTH +- LDA (SRC),Y + STA (DST),Y + INY + BNE - + INC SRCH + INC DSTH + LDA DSTH + CMP #$B8 + BNE - +} LDX #$FF ; INIT STACK POINTER TXS LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX @@ -95,13 +114,13 @@ SEGSTART = $A000 ; BCC + ; ADC #6 ;+ STA $481 ;$880 -FAIL STA $0480 - RTS -SEGREQ !BYTE 4 - !WORD $2001 - !WORD $9F01 - !BYTE $10 - !BYTE $00 +;FAIL STA $0480 +; RTS +;SEGREQ !BYTE 4 +; !WORD $2000 +; !WORD $9F00 +; !BYTE $10 +; !BYTE $00 PAGE0 = * !PSEUDOPC DROP { ;* @@ -113,6 +132,8 @@ PAGE0 = * STA OPIDX JMP (OPTBL) } +VMCORE = * + !PSEUDOPC $A000 { ;* ;* SYSTEM INTERPRETER ENTRYPOINT ;* @@ -1064,4 +1085,5 @@ LEAVE INY ;+INC_IP RET RTS SOSCMD = * !SOURCE "vmsrc/soscmd.a" +} SEGEND = * diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index 3014826..0deeb6a 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -323,9 +323,9 @@ asm memxcpy(dst,src,size)#0 ADC #$60 STA DSTH LDA ESTKL+2,X - ORA #$80 + CLC + ADC #$7F STA DSTX - DEC DSTX LDA ESTKL+1,X STA SRCL LDA ESTKH+1,X @@ -361,9 +361,9 @@ asm xpokeb(seg, dst, byteval)#0 ADC #$60 STA DSTH LDA ESTKL+2,X - ORA #$80 + CLC + ADC #$7F STA DSTX - DEC DSTX LDY #$00 LDA ESTKL,X STA (DST),Y @@ -571,9 +571,9 @@ asm lookuptbl(dci, tbl)#1 ADC #$60 STA DSTH LDA ESTKL,X - ORA #$80 + CLC + ADC #$7F STA DSTX - DEC DSTX LDA ESTKL+1,X STA SRCL LDA ESTKH+1,X @@ -797,11 +797,21 @@ def getpfx(path)#1 return path end def setpfx(path)#1 - byte params[3] + byte params[6] + byte fileinfo[2] - params.0 = 1 + params.0 = 3 params:1 = path - perr = syscall($C6, @params) + params:3 = @fileinfo + params.5 = 2 + perr = syscall($C4, @params) // Get file info + if not perr and (fileinfo.1 == $00 or fileinfo.1 == $0F) // Make sure it's a directory + params.0 = 1 + params:1 = path + perr = syscall($C6, @params) + else + perr = $44 + fin return path end def volume(devname, volname)#1 @@ -982,18 +992,6 @@ def allocheap(size)#1 word addr addr = heap heap = heap + size - if systemflags & reshgr1 - if uword_islt(addr, $4000) and uword_isgt(heap, $2000) - addr = $4000 - heap = addr + size - fin - fin - if systemflags & reshgr2 - if uword_islt(addr, $6000) and uword_isgt(heap, $4000) - addr = $6000 - heap = addr + size - fin - fin if uword_isge(heap, @addr) return 0 fin @@ -1183,7 +1181,7 @@ def loadmod(mod)#1 return -perr fin modid++ - defext = (codeseg.0 | $80) - 1 + defext = codeseg.0 + $7F // (codeseg.0 | $80) - 1 defaddr = (codeseg & $FF00) + $6000 codefix = defaddr - bytecode defofst = defaddr - defofst @@ -1430,7 +1428,7 @@ init_cons // // Print PLASMA version // -prstr("PLASMA 01.01\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout +prstr("PLASMA "); prbyte(version.1); cout('.'); prbyte(version.0); crout // // Init 2K symbol table. // From 474f0a90172bdc1ac4e550214cdfa1c4222f6100 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 9 Feb 2018 20:17:13 -0800 Subject: [PATCH 37/40] PLASM type override bug :-( --- src/toolsrc/parse.pla | 4 ++-- src/toolsrc/plasm.pla | 2 +- src/vmsrc/soscmd.pla | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/toolsrc/parse.pla b/src/toolsrc/parse.pla index e5f8588..c444eb4 100644 --- a/src/toolsrc/parse.pla +++ b/src/toolsrc/parse.pla @@ -402,7 +402,7 @@ def parse_value(codeseq, r_val)#2 else deref++ fin - type = (type & PTR_TYPE) | token == PTRB_TKN ?? BYTE_TYPE :: WORD_TYPE + type = token == PTRB_TKN ?? BYTE_TYPE :: WORD_TYPE if not parse_const(@const_offset) rewind(tknptr) // Setting type override for following operations elsif const_offset <> 0 @@ -421,7 +421,7 @@ def parse_value(codeseq, r_val)#2 elsif not (type & VAR_TYPE) deref++ fin - type = (type & VAR_TYPE) | (token == DOT_TKN ?? BYTE_TYPE :: WORD_TYPE) + type = token == DOT_TKN ?? BYTE_TYPE :: WORD_TYPE if not parse_const(@const_offset) rewind(tknptr) // Setting type override for following operations elsif const_offset <> 0 diff --git a/src/toolsrc/plasm.pla b/src/toolsrc/plasm.pla index eeb5ffb..5da3dc6 100644 --- a/src/toolsrc/plasm.pla +++ b/src/toolsrc/plasm.pla @@ -411,7 +411,7 @@ include "toolsrc/parse.pla" // // Look at command line arguments and compile module // -puts("PLASMA Compiler, Version 1.01\n") +puts("PLASMA Compiler, Version 1.02\n") arg = argNext(argFirst) if ^arg and ^(arg + 1) == '-' opt = arg + 2 diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index 0deeb6a..4afce58 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -29,7 +29,7 @@ predef execmod(modfile)#1 // // Exported CMDSYS table // -word version = $0101 // 01.01 +word version = $0102 // 01.02 word syspath word cmdlnptr word = @execmod @@ -1500,6 +1500,7 @@ while 1 saveX execmod(striptrail(cmdptr)) restoreX + //close(0) init_cons break otherwise From 9ee760007aa77171238b083dd69ef7e9222d83c7 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 9 Feb 2018 20:39:05 -0800 Subject: [PATCH 38/40] PLASM patch #2 --- PLASMA-BLD1.PO | Bin 143360 -> 143360 bytes PLASMA-SOS1.PO | Bin 143360 -> 143360 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/PLASMA-BLD1.PO b/PLASMA-BLD1.PO index 698488ed3f536cb780d82c682e1b755c5fdc1aea..3ced5367b08348148d11c30a184a4cec6ecd020c 100644 GIT binary patch delta 3190 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 iMJv9%(r~>w)lG^(N=E`UZvO?;_4IZC diff --git a/PLASMA-SOS1.PO b/PLASMA-SOS1.PO index f118906d926790fd87578a342d9d99f4c7d5a4a9..1db9bc388ce26f027382d438c197e1bbb5bdf092 100644 GIT binary patch delta 2265 zcmY*aeQZU&Ml3>< zSrJ7`h{)7QtGew`P{&jZRq|}du|tE^sZtSz(m~ZfvPh_ECruf284RYvJ}NP3&Ca!x zm09+^_ndp~@0@$i?_7_}+ehZ@)7_%q3td6j6uG~#4Xy!vKN1PdsNy>|!8T)Y+lf<( z2XnpxoZTfElJ|iJ3ondW3(}Y^2Z!y2+?eCE^_TWbvv(J43yyKe<=@VJd1~?3ry7+{ zCk)N|tSgaQxKaI}(Q#c$7-zkz@$XjyzxtW?p0CsQ_fxk|!l{vy@16Yc@#~SS@UlBMKe?xF}2Fi&70+8=DYc~%)jPU^Gaoxd8aaN-YiU-7Ye7% z{}kReKP|j(28!oR-^`9+T<|~2^He<_d?`KVsLlmn8h*_8RPxd~&2+5Wx83>b4%pJ>wLpWk1m&Yl+#j z4V3J+(GO#Uy_i4PmzOdQ{8HbBa71YaD%9=hN45Q-zPxG!x(R0;G^Yf{not|!elHYR zjkuyvx8HA}pDg2PB3c~^MG54L*(UKXxJ98biHMQZs+Axm)3f&64!9&2!+pfmtzqE2en-L>|?4NEGgZs)Yfp>-`?Jk1C2 zOdYV6c@c@1rXvBR1^Tu8Knh{g>}})R+WQ}SyHMA-GlVU#DIpolHSlM#gHkpOdU&r+l78-=dtL%Q(b_89H9lxPGD(Bpal{Xg86 z5Hus*78qvJI|u!>+v@&CUJ}1H&oi6A=Vng_4L;rl?o3C_g&pZ)?NiAZ#9UY>RD{^$ zrQ}LTG)U{ZrB1F3;XpgFlvqXe!lDd_rzJR=2dS4%+93LSlXn>=Yd^v4Dq<689(<=P z8P4fA5G;!r*(tOdeQ$lsKQ~4F8N0a04qYzrQi;tOxk%KBWkLs<2N^OOk&$ge`&Jy4 z6CG}JWf6cslkB1~+TPxL@l1wj79PSXd=G0+CH9PJoNZqzj2TzjV^1BNlGTMp)e11Q zJzu9hXSLpZU`xJ6fK_;!9i2+pRApmt&qfI^+5d+L>`2j zD|X9x=z;j~tw~u;0`2V%)yz@kU2Ry zr^;Tg$}E$|WT*~Eko6vnOXg)<%UfmW`Fx^b^V3h)!tH-Pk7?lqsF^;sgI@t!%RH1z jlPJ*l*em4&f*G|eN2%WU8d5V&){lfy`co?4e}whF@uTw~ delta 2078 zcmY*aZ){W76+iF#;k-D{c47>1S{q&*W4s&Jenk7QATFU>ggw8{dpQQtR0A(E7i-2KxhAmHH*I1+~ zc@H(ocWjVB_{m{Mr?co7388Ke&D^LUwSgS}68%#(O#MNUM}sE6&TJ@+E9`l6flE`O zKmrg$Z6={ANEZn%9LV&rGr7;9?LjLFoFrk0DJ48fg2BF6idkMrJ_17pa!=FP(9CaW z4sB>c{#(UiCqdZTOV%cUoXSZ~#jgHx`}d;jA`jPc9xNz&Y7|`d2_unFiiMYh;?wP| z`AbWaqmDj3ic#uC$bPssk#kTYOMhvpN$ca}TbdFw?z+dh2q1&{)I|_O2C#5g#XNLQ z@XfP3B65D4__5I;tn;1&pO*@%^#E{nGUu>!rGh&X26|c!xSG&dvSiXhEH;v>6?UV- z-MJ9tLK0GQadoWVrf$O3r>Mc*Cs|ayZ`>!|Jm2zzJVu)sl;*hhl?x=(g?u6(pR*a% zP!_J?jweOJi8YE#A}?DnzB%73j&?^el8k|EvD$E9Pn1nS#W<_gaJn>@IO4SDZt{3v zB8@IcF`oVF8uwARTW8m+1*3=!jh^Hr6Ob`T@9W?fUg=h@i`DK(=c#g0;WBUB4d?00B@ux|0wXw)^k)hFhoDP=}ni{7ss6L+G9f3QZf zI`9DZ5N@!z=<3;)#-Iu`Pqm;G2Tt`d9wvn#*W_IIfCtxAmy1E3p+; zw}OcVc)Jyb@f2_8I!Q#?Ol_nPXynZU?Xod}+)W&+KlXI)|4%uSfJ7ViCefA%GhaEg z6;hjw2M3I_l!bAjX>1>MF8k*-6VN)BlFjqt*yS@V5dWJkuPEyiMl7V968*6evRV

In^Yw}Fou%n^T&#ogEoL=)Fvjf%n!U8Hxog=@YaX}@@MzF+xDT-mWB z_0@03NzNr5btzP7d@b=-u#)wpyp6@pIGx2Uc>9W-D6R=lJhA6s#ms)RmURP6?RT0( zF6WqcPVaLX{q90IcA}E3FAsgTL1q!>Y>-U7=4C zH{|e^jA5mJA5Z?Uul)48HtfYBPrPeSDz;9Cd zD&{P!he~WaU-3wwzKAJ$WdN*TKxDfsPDlz^3cj7|`B<5U^v?A?v@)<}aIU+`;s-t&k#v zGHny9Vr`dqVd|)p+Vt?jgN<+}jym}Dld(2bAA3}$aAT|@L%Ft$486)8uTCp=+_e#9 y_LKj@sQkM&o~lH+`W=LwRpzd)1MI9K!0G=3FfnuqQ15WRqdZH`Pz8TQ?*9QEtH6W+ From 1fce2f591628fa715dd95bd61b2cb757810c27fa Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 10 Feb 2018 10:09:33 -0800 Subject: [PATCH 39/40] Apple /// and ][ editor keyboard tweaks --- doc/Editor.md | 116 +++++++++++++++++++++++++++++--------------- src/libsrc/sane.pla | 6 ++- src/toolsrc/ed.pla | 101 ++++++++++++++++++++++++++++++-------- 3 files changed, 163 insertions(+), 60 deletions(-) diff --git a/doc/Editor.md b/doc/Editor.md index e88d26b..4d0b5f0 100644 --- a/doc/Editor.md +++ b/doc/Editor.md @@ -37,61 +37,99 @@ MEMORY FOR THE TEXT BUFFER. IT HAS TWO MODES, COMMAND AND EDIT. - EDIT COMMANDS: +EDIT COMMANDS: - LEFT ARROW = MOVE CHAR LEFT - RIGHT ARROW = MOVE CHAR RIGHT - UP ARROW = MOVE LINE UP - DOWN ARROW = MOVE LINE DOWN - CTRL-K = MOVE LINE UP - CTRL-J = MOVE LINE DOWN - CTRL-A = JUMP LEFT - CTRL-S = JUMP RIGHT - CTRL-W = JUMP UP - CTRL-Z = JUMP DOWN - CTRL-Q = JUMP BEGIN - CTRL-E = JUMP END - CTRL-D = DELETE CHAR - CTRL-X = DELETE LINE - CTRL-V = COPY DELETED LINE - CTRL-O = OPEN NEW LINE - CTRL-F = OPEN A FOLLOWING NEW LINE - CTRL-T = JOIN LINES - CTRL-I = TOGGLE INSERT/OVERWRITE - ESCAPE = SWITCH TO COMMAND MODE + LEFT ARROW = MOVE CHAR LEFT + RIGHT ARROW = MOVE CHAR RIGHT + UP ARROW = MOVE LINE UP + DOWN ARROW = MOVE LINE DOWN + CTRL-K = MOVE LINE UP + CTRL-J = MOVE LINE DOWN + CTRL-A = JUMP LEFT + CTRL-S = JUMP RIGHT + CTRL-W = JUMP UP + CTRL-Z = JUMP DOWN + CTRL-Q = JUMP BEGIN + CTRL-E = JUMP END + CTRL-D = DELETE CHAR + CTRL-X = DELETE/CUT LINE + CTRL-V = COPY DELETED LINE + CTRL-O = OPEN NEW LINE + CTRL-F = OPEN A FOLLOWING NEW LINE + CTRL-T = JOIN LINES + CTRL-B = TOGGLE INSERT/OVERWRITE + TAB/CTRL-I = INSERT SPACES TO NEXT TAB + ESCAPE = SWITCH TO COMMAND MODE + DELETE = DELETE CHAR LEFT APPLE ][ FEATURES: + ------------------ - SHIFT-M = ] - CTRL-N = [ - CTRL-P = _ - CTRL-B = | - CTRL-Y = ~ - CTRL-L = SHIFT LOCK + SHIFT-M = ] + CTRL-N = [ + SHIFT-CTRL-N = ~ + CTRL-P = \ + SHIFT-CTRL-P = | + CTRL-G = _ + CTRL-L = SHIFT LOCK SHIFT-LEFT ARROW = DELETE (SHIFT-MOD) WITH THE SHIFT-KEY MOD ON AN APPLE ][, UPPER AND LOWER CASE ENTRY WORKS AS EXPECTED. - CTRL-C = FORCE LOWER-CASE CHARS + CTRL-C = FORCE LOWER-CASE CHARS - IF YOU HAVE A LOWER-CASE CHARACTER - GENERATOR INSTALLED, YOU CAN FORCE - LOWER-CASE DISPLAY. OTHERWISE, - UPPER CASE WILL BE DISPLAYED NORMALLY - BUT lower-case will be displayed in + If you have a lower-case character + generator installed, you can force + lower-case display. Otherwise, + upper case will be displayed normally + but lower-case will be displayed in inverse. This is the default. Apple //e AND //c FEATURES: + --------------------------- - THE 'CLOSED-APPLE' KEY WILL MODIFY - THE ARROW KEYS INTO THEIR JUMP - EQUIVALENTS. IT WILL ALSO MODIFY - THE 'RETURN' KEY TO OPEN UP A LINE, - JUST LIKE CTRL-F. + The 'SOLID-APPLE' key will modify + theese keys: - COMMAND MODE: + SA-RETURN = OPEN LINE + SA-LEFT ARROW = JUMP LEFT + SA-RIGHT ARROW = JUMP RIGHT + SA-UP ARROR = JUMP UP + SA-DOWN ARROW = JUMP DOWN + + Apple /// FEATURES: + ------------------- + + The 'OPEN-APPLE' key will modify + these keys: + + OA-\ = DELETE CHAR LEFT + OA-RETURN = OPEN LINE + OA-LEFT ARROW = JUMP LEFT + OA-RIGHT ARROW = JUMP RIGHT + OA-UP ARROR = JUMP UP + OA-DOWN ARROW = JUMP DOWN + + On the keypad, 'OPEN-APPLE' allows + the keys for navigation and misc: + + OA-4 = MOVE CHAR LEFT + OA-6 = MOVE CHAR RIGHT + OA-8 = MOVE LINE UP + OA-2 = MOVE LINE DOWN + OA-9 = JUMP UP + OA-3 = JUMP DOWN + OA-7 = JUMP BEGIN + OA-1 = JUMP END + OA-5 = DELETE CHAR + OA-- = DELETE/CUT LINE + OA-0 = COPY DELETED LINE + OA-ENTER = OPEN NEW LINE + OA-. = TOGGLE INSERT/OVERWRITE + +COMMAND MODE: [OPTIONAL PARAMETER] diff --git a/src/libsrc/sane.pla b/src/libsrc/sane.pla index d09fd7a..ea79ca3 100644 --- a/src/libsrc/sane.pla +++ b/src/libsrc/sane.pla @@ -837,8 +837,10 @@ def fpInit() fpzpsave = heapalloc($0034*2) (@fixupXS)=>1 = fpzpsave+$34 (@fixupXR)=>1 = fpzpsave+$34 - sane[9] = @zpSaveX - sane[10] = @zpRestoreX + zpSaveX // Clear XBYTEs + heaprelease(fpzpsave) + sane[9] = @zpNopSave//zpSaveX + sane[10] = @zpNopRestore//zpRestoreX else // Apple II fpzpsave = heapalloc($0034) sane[9] = @zpSave diff --git a/src/toolsrc/ed.pla b/src/toolsrc/ed.pla index 135db79..2a96be4 100755 --- a/src/toolsrc/ed.pla +++ b/src/toolsrc/ed.pla @@ -33,6 +33,7 @@ const keyctrlc = $83 const keyctrld = $84 const keyctrle = $85 const keyctrlf = $86 +const keyctrlg = $87 const keyctrli = $89 const keyctrlk = $8B const keyctrll = $8C @@ -569,15 +570,6 @@ end // // Keyboard routines // -def dev_status(devnum, code, list) - byte params[5] - - params.0 = 3 - params.1 = devnum - params.2 = code - params:3 = list - return syscall($82, @params) -end def dev_control(devnum, code, list)#1 byte params[5] @@ -588,13 +580,80 @@ def dev_control(devnum, code, list)#1 perr = syscall($83, @params) return perr end +def cons_keyavail + byte params[5] + byte count + + params.0 = 3 + params.1 = cmdsys.devcons + params.2 = 5 + params:3 = @count + return syscall($82, @params) ?? 0 :: count +end +def cons_keyread + byte params[8] + byte key + + params.0 = 4 + params.1 = cmdsys.refcons + params:2 = @key + params:4 = 1 + params:6 = 0 + syscall($CA, @params) + return params:6 ?? key :: 0 +end def keyin3 - byte count, key + byte key + repeat cursflash - dev_status(cmdsys.devcons, 5, @count) - until count - key = getc + until cons_keyavail + key = cons_keyread + if key & $80 // Open Apple modifier + when key + is keyarrowleft + key = keyctrla; break + is keyarrowright + key = keyctrls; break + is keyarrowup + key = keyctrlw; break + is keyarrowdown + key = keyctrlz; break + is keyenter + key = keyctrlf; break + is $80 | '\\' + key = keydelete; break // Delete + is keyenter + key = keyctrlf; break + // + // Map OA+keypad + // + is $80 | '4' + key = keyarrowleft; break + is $80 | '6' + key = keyarrowright; break + is $80 | '8' + key = keyarrowup; break + is $80 | '2' + key = keyarrowdown; break + is $80 | '7' + key = keyctrlq; break // Top + is $80 | '1' + key = keyctrle; break // Bottom + is $80 | '9' + key = keyctrlw; break // Pg Up + is $80 | '3' + key = keyctrlz; break // Pg Dn + is $80 | '5' + key = keyctrld; break // Del + is $80 | '.' + key = keyctrlb; break // Ins + is $80 | '0' + key = keyctrlv; break // Copy + is $80 | '-' + key = keyctrlx; break // Cut + wend + fin return key | $80 end def keyin2e @@ -634,14 +693,18 @@ def keyin2 until key >= 128 ^keystrobe if key == keyctrln - key = $DB // [ + key = $DB // '[' + elsif key == $9E // SHIFT+CTRL+N + key = $FE // '~' elsif key == keyctrlp - key = $DF // _ - elsif key == keyctrlb - key = $DC // \ + key = $DC // '\' + elsif key == $80 // SHIFT+CTRL+P -> CTRL+@ + key = $FC // '|' + elsif key == keyctrlg + key = $DF // '_' elsif key == keyarrowleft if ^pushbttn3 < 128 - key = $FF + key = keydelete fin elsif key >= $C0 and flags < shiftlock if ^pushbttn3 < 128 @@ -1060,7 +1123,7 @@ def cmdmode#0 word cmdptr clrscrn - puts("PLASMA Editor, Version 1.0\n") + puts("PLASMA Editor, Version 1.01\n") while not exit puts(@filename) cmdptr = gets($BA) From dd4ecb77b3f2090acf7524c7f016df6c0f4718a2 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 10 Feb 2018 10:39:30 -0800 Subject: [PATCH 40/40] Apple /// and ][ editor tweaks --- PLASMA-SYS1.PO | Bin 143360 -> 143360 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PLASMA-SYS1.PO b/PLASMA-SYS1.PO index 62db753b9d1ca7e0a1a595e9e811bcb2410ca5b3..06d01477d497c70be59dba011bef9d2968ce855d 100644 GIT binary patch delta 7511 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 H3KjnW%+RsM

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 NUAj9?{_Z4K{(qNfUv~obyw8r z+IH5Cq)ZHEwUTTQC5l&460hKTMNzX!dBxh=wRShImXTQZ^@l{}9tH;X<0)2SIT#s$tb>`r^0W7k|(k2}}ydRC{4f2mBG$47h9 zUrN0AKeN*@Cd*=f{sF$BOv8?au)#@&ut4|zfMem#eCxBW{jF~VdRs#s%gojsr`zUo zKP&ZFnSv4LFYEtucUPSGIUd`yD#mo#zjbpGaVPhwLRF-z*9G4vNzd^TZ!~xrZt=J| z#Q*PsK!M@l%&8u`J2%gg-rHp>@Ly5|u}-X?;rT7<{ZFE1yAv?qUWzBt_Bh`Oru2Io3vAFaT)x;R-ZHXc?L-SdAH+^|0R`^z;-kv6nj*OQoBB$$;gjtM< z70e{gXUSrfbR#l1I*FaTa=GdF<>m_xeR6wz`egIpP8RD;7^V{vfB4tqqQtl;%%*IM zJInI?l`vm7ypyKDJ9+US@yuVAV|%GAiSg_Q<@0d~1o12tWkt?hx6SGr9T=A$D7zCV zEAH5x!}C&iy-+us@7P@mx^vnr)~CHOUtg5n?D(k|ws5LB%5e$Z5&Ed+7_Uf7HU;8( zI@PAA`HoYVd!{^1+(6GA|2f`n0Tpfk5SS* z>P&7a;gMMyS=Ws?sl3i6)jrCXe0AZHzGY|q=X={YY2TAo(un;%h_9c$zezDh*r#E_ zK@AfdH3{M=jY@3NM2I&L{|G;8c(E0&F(^Td3*v?JASMigA&?2fVFWnA6U4;v()vTo zFkpr)&eA`Z(6%ium8>L+my%uI*MxFhmaW0^Ir+bq?q5$o6{erYoErG5XXWROXrF_= zkr?ISs#k|Eo0$V;x%q)1#=)0|S*lfZEHl|{g*JP?XH|@Mupp+;`OCa7re8K|uj~7w zt{C0D)?w0TvmSv@&9gY37WyVI9qSp@@l%sKELXnSSXw^NzgkAw5^?`g$0_}0j%*P1@JQD=iB;O4oC$}REoqt8z;hg_NGYx8XvO%k-{zOb3 zW}s54kpE&JS5T&5S-QbgYafGhA4MCM4K$cG82M@$$7SO|q&uoDw!kxJN!b`Qk}2ar38_$yM0r-;P6#0xFRJ%Luhj1Ux{ zf?&`Ab{8Q6xDo%QHywDHv;D$>^N~4+yoF>1(>2iAti|{Bv)2=Ae zb7RK^9;;>?r(R?955(FAb#IJ*==h0~CQq3sse!hOW8Xq8GPc2UL(W+fABV24St2n48tYB&LpfT@@mtKvk9D#k0gRZN%x zbKwj$5b|jD#YX4fA0ItcPvz5$uNj za2(FTb-3%r0bevB7z_{#y&(gp!(4b1ys!~u*bVh?7@FZ0`~w~UX))6v3QRBnvS17p zz+{*MOJFT{B^*A118@XR!?$o7LV_`6AsTu@23Vi~Cc+F@0e^%IAj57r0>|Jido zA+&%pgbCpg3uz(DD-1#4fC(@a=D=I97V63&9M-`O_$%y%FW@{}0|i#3P%uC|q(KJcfD6XKBB+Ev zz!vxr_QPQ~1nfMz(YB!SiaB%V&3|*jLR7X8 z_1Nm5i?mYy#z6`6uKd73GiZubu&{5#+5%EjP@W;hm|eoV^XkP#gGs*Nq7XVLUw6?v zbWdL3rar3buoQAvOCK&a%17Lkp{@>dC>1HAUa(E$CP`O-LNKt6sE2J1S2Mehj zO=1x_(JU^a3A9PRTtquMj|<1I*s{s`vI+XKiF(8-mB#MwBl7yO6cb%;OfjYem-DQ! zugRe=o22Kapu!yz<~|@dj-_aHa(yff^;Tn}&%-7<17F;ItLISzyKj6LkI&X2IRg>;s6mMi>#}o!WdXU79k=YB$`HK z88%Vlf{G52NivbaWHl3IT!uJWM)k2LLaZP-jv9N zeN9C<=BB&7cc+vHRffR59zHw8&q{HYqSBP3tfU@aEnkZZR9V$KJ#uMERjWF*vNT1R zOmBDjh?3&znSFQmLzUT6Xii;dPMfDTO{FZQ4&|=U6t&qwtd22KOzQM$6Q|9vwqIVS zGST~xGHF2)5qn0DnRHjimBV!(-2MKRf&r0E$0w5Stt4M-l8?zJjwi2JXZ`4j+LkJ9 z*s5DCUw2HAii?Xq2WxhGws*JZK&@wQ?T%d@wZ3*&?S2npyfflBn{GgHd1i$#K0mZt z{plQ|UN0En^iGb`SMhP2Xo$5bqr7*ecqh+KNm0fblzY6Bl>P++%3rLoej+vXZyMD! zs)Pgi$?6KHcdS8~fug2)XDF$OjrRm1O8BN3IqaSpiPnXZH#O4wn53TZtjwM+#wPBW z9;k^FR|l?^udR@OAnli9k!J=9KYrS@G^=%R!eFZb-h{g+O`kf+q16bDy?gppNAjR) z)=AT+Pn#~1$;pmM*8acn^|ww%>dDjYojS1}NuD}$oFjRnwM_)&9YKhR^bG0AZ(e@H z_k{aoYyJ1~Sc+c)W?QLv4 zQ}Riq_iQk{k%sSSQuDS>^LV-=g(tN1G}Y#`a?0=WD2o44kEXOgoqFcMgPyH4_=#CL z1?BVg<)r6{-kx8wtd`IFh|=8DObb}hTu!;mDL0D7drt)fq;jm;6zQMuSt#~YTKs?Z zER=dG=N7aO)YS{#hJsVpC$E$+&aFc{9tj#{Hz)dH8=F%i=QbCW$9Xms>Z(`oX;!cJ z$5uElZfbA&c9$dHr#i;Xm@+N_E!rN~;r1mv`x|3$jrHY_w-2PwQa)xjWI3r}V#Lb4;6h zSIU%Nj#OGN!Vow4Et{s>#OcX1Cr#HRntGFHWC6CW?U{C^nf|s2lTZZtmLkxyutbv< z?7%^3Ge|rkGk+&dtGA94ke^qQL1g_Of2$jY#Drg%2(kE41OjDnY4t`4c#|eM9McjY zlllqaw}Nfh?@CH0Oq+U3wUM98P;ZUG?=r=t7L*gb|GW*-vYFqpv4p>s?Z5Q@vKrvf zd;WX<@2!FVj{g6>Z67STzLmO`)(Yxyt-rr$_Fyo$T~Gm+tGP`>O#g&@~C(E z80^VC79aW4;d%AqhKrq7%UAOqtD4*`o!$D*ZmF~TOlSA0&e*hKcj*atW4_SM;v*SCGt~94BEgr74*?qb5 z>e6QAGQC||jVK>UysGA@K614pufmyq))Pv1$4X0CMO>zGPS#noJx%AzcF0l-sOqM3 zD&MIt(64jdupO&&ZpJjnw0N5js@|5X6*-au`l_llCk~^r>gkrvXPsaFPnYm^U=zvD z-1PCLU7Pym$LGJl>5lx#`S<3}$$vcm@A-26_536GJM-h;zVvqZ+aupjdHW*yCO<$9 zZHg_pv%pZ$wP1?(VegAxzxN66>)tQDHQqDcsRd6I%rAJm;84NW1@hbfe7pK>VRN_5 zgEmjvT(P-!^TV4LZCN-AgVAITvB;re;Sv9#ef+=0`u8;u+1{!0cAzhn)zPt6SGEIVPxGsWVHLk- zxu&Y@wF<58sO+JNLn=sL>%DZuw%&^oOJnM8*M!{OCZw*D=Izw(1v9b$GtDCVY?)dm z<`~|udu4}*yi#{gED9LP>I`(iexFyTb@4VH`TZTQ)Kz49NDj05l^uzc(^R&jDsz5D z-D>ql+i)nW>$C&GYNv_->ub%cYb!^micT~_=m@GVtIJc%b_5j$w`xF?s(Gt1?1Gf9 zHQq<6^C~J!FXhpKu8*91Nx786HeL3#R@%R-rol9hmbzMF>hP^kq^v$tH21P{*?U@P z_MTB%cAv@-)xqB8-3=uJN}KC0sgXsRV_vOZZy%cKAXp}v6X!N7%|0@>MQKs1N-q^9 zw?@uAt(>N{Jok)pCad?iX;6^g6~3(mWop)^K?%1gkEG2sX)}~~B^Y}vyH+j#nq6y=gLP{6 zvWkN{)J`4Uu1rPXcUs^#barnWb_dZFuU0JPa{I&fo>_QJ*cX?%C;Y@2<%lq33_*G-gni1YTmN#n#Lac7P;8| zS_>4ch05De2)BKM{CE2cT2;4aj{1JOo=atdJqi=n8j zVs&mqnc9N8dfCGv2_n$JmD99?D`(P`hIHkW(-H9jHNy~+Uq* z8G768!|q5NK5qPkiIXN@0*^3Z%ETG>%@C%Hn~;<|Q4ey$IERDRZmIXCP0-=yn9Acm zgWi(qZ9Kgt@pny1n?P?f^l8)XO--FNU6_$JeM0Jenlmm!YvV#ayCQX?!DUCXirc0i2?_FuyeGPL4sU))SLP1R7Q$-1duNDn0yy;IYJg{|i;h3!x3g>Q3Dm<}u zN+J91^uqpI|4_JL>-~kV6)!1#`rS2!ecpYlaMHW46h8m1r!eB(cM88K`bXid&VkNb8Pb}Ig&@S?A-FuwRuVgKS@g%O2>Gy%j4{Htr-lSTQ&S*E^U z;dU3TT~~yju=q+UH# zpkH&`#O~e7MInaD}Q=*dro{=Eu?H$q_P@CDEm~=zrPRC$}y`6xniZtH%U$U zL;KY44wb9ton`x$QSS0(;E#ldCMjQrM0=z?dQWTFz5sizoF=5xHctbQ^dgdegTiCE zy2C@Vp>pIrC-SS8GO^LFkvf;vLCg+Cf34!yJXPdbp~7wqCaOBP#IhZ~Ns29cfzV3KqR=bn%WD;C zeIE7-&h{i)NpL9D56?CNW>6Uk4_2s>7wld=7=1$ITtN|X4mau5{jbpOO>?5jwK|vt zWrfPfW&0JeR9LoCk<#O2)m~I8BCK9%E)|!3c5p|I3A=*sc+ROS>Evxehw?V(ie6zJ z54rz@+z;{GgY4)NfS6b3mGX8V`+8*mnG;PnOJInLEVi*rSr^IRY?(`Sw$EePw5N)e zFDY`7*#hO!F*c?xe$Op&IvN+s+xVp-(n>Bi!$>mBB*S9c9V@m;FuV9AE{jW8lD?#9 zb|_6CF-V|gMwaSGhCr5zw#s&?b9A#M%EY(jxRkT))#9E;a-PP7a7Zq=$WlG>6J30U zfn=C$)v-cbhNjsel+DE1xL>o`zR-B6AQR;<-ok+b@EMZr`3?>v|1oy zYQ@r4@};!o1_&^@gry-iMJqea#zKXd+w{$#`bsW-sgW!-*~Yf(JI6HJOxYrIHesm& z#WK3Yr4XdmBgqIQOT%sBVhwGDv$)tLu259zobcHZG}$fnH0js%#FF%D1yhYA=0-u< zj4jKr6~G(A6xz77ZCmU#@TV=yuNR=biOsx}Ne9WslC1Xl zF2X*0e-T>YxX+;@WH#?&gI(6Zxp;?2)1c*SjEn6Sk|9u^(Al&ILq|&{wkI>V#MuU@ z2ZlB+U1SC12J_S!hsW@7+A<>?JxKbZqWO!FHR{&~!nA^VOc^BgtJYhig0yK4TF@7y zZ7e$neWBgQu_P$L#<7qQRGj8xay1Z^DBI8^m5(ZmT3gm$n*!sBAo z*moB3j)BC*&tFuO_D=C4VQLhyWzp${$50ttY`2X;)q@27B zb49sCS8Up{cQV2t#c9_ zp~Mvpodh6~=hK$^(wAz*U#c~?nD+d;=m%jg*%3ucC%2bv=AtmITe!kxIwrzqH_)y; zgxHt`18tFsqlszGz*r+@Ut?O7e`-95HDaJ3ASyN?)}Gd9%hb*!L1!H`+B%4aN8x50 zgzHLbGwUng|#FN=(EbrVLI)}v*7Ci;`v5rzY z;m}%_=5UT^&C{24F6C)xGzc9f`mqmZ7+unwAlm|AjxKQtrVPosK<{{v%+X_FT_C!o z#V(2JWyPW`*<>sMmeCTi4O*&C?M7^^lpY8=gxG$j^Z?K-vCq+?7`CuEBELW+Ba9@( zW<@~iR(aFrCcgzT!a~?4sXRIhardZ2Uk|Ql40U9Ic?U7(T;8?I+i2M zess>nNFmM;Oj)U4wt{M(@wEinI$}+Urk%fy2}7q{6vF?#sGuAUdzb|@o5b!k%Q-B{ zZB4%z$6wj`hRg`+Tl`JnV#N@pqP!Q9l zaK$CM-mmCXNalAcTpV+v5Z(Cc6NO|V237irLIh%OMfU=Tg`akW)J_;5crYFj4QGV4ZJj@A$H2H&wZRTi^q&@jwYBa{g=tz>bjH;YAvMepX%$~Nq2rZE+kpy;( z86~sRvD}L;F3TS;O3>l$EUm!lj~Ag$XlYXoB!QcDH|0h7sS>B(0d4y@ZNpYnC@Pl< zM`2Q1ekS+-t7r57hW&@vfSzQH07e7jfD`}=M%D~qCU8ISFyI2_0Ske@0Ly?UfoFhB z;CWyb@FL&_@__Zg8^BvYA@B}R3cL?|2z(5b1N(qOz)|27a299*z5%WPH-Mi3UL;w1 zzyO$m9zYC`01O6h2NHp?z(gPgm;$5%Gk}@EeZV|m3Gfu~Ebttl0PBF4fc3zez$Rcb zPzV$QAB!aSm}tzs2HX^_S&T$-d5L5h;YLV8R&UTR02_d}fFBS(*}!DoXFxpyj{@_7 z#lYjha^P8@0N4tAXdt83o zL;<~kXrMn}0}_D2z%XFAk>rjshGmTheK#--m=4SW{s=q(%mvbc1;As#3g8*wIY0qk z1lB^%OOTTXdOh$u@Fws!PzV$QCBS>YHlPC73G4$@;2>}eI00M+t^q#*cu_Q0Zwku_ zF_ElLpfk`N=n3=&Vt_bc5HJK71`G#A0^@**z}>)9$Vr2oKY;!d-~?R2B47!y9C#MU z0$v32fc3yeU^CJdA*~;D8SoMCPhcmo2iS}FTEy3bJ`5ZKP6B6vX5ee!5^xpx9{361 z%p^+yB)|fM16_b_Ko7tLEC806N$%6;(5x)b*}#jyTHtTMdf;`S1o#Np2~+_p(i|{{ zWqk>{0XPFR0T+Nvz*XP|@Dsp=UI(?7klfCeu&kb-djrux91stT2F3vsfx7^#*ICnm>A-B@QD8o>5LgB*2c80+gUlB# zOzumd{|>wcyb0t3#XuQQ0ek@*0!{(n0@ndnM%@9CKwlsMxE)9Y#sL$7y8s7}3d{f= z03HJ70*iqsftA4Xzze_{AP?{WZv#cZ7T`mm0@wq50n`D9fiHn(AOKtgZpxU8LYZ81 zDC!I71at+WfL@^_w;$pXKo13m0V9Bkz%0Z$Lwn^u8p`L+59M+fhlb=n0sk|h*4*cT zmq9lp?s_Pj8xqFm-X7K~cVw6)cWfA!`*2uT)>C05HxI5a4DAg1P#B+e6z++zPPt9s z`6i6Zx&nVhIG@!e9DO~U&)-lkHKntLYz&s6v0NsJ!5hOPzg3XPK;Bp5> zSaU~3@VR5*PKXe5r+`k4;Id|c=Z_IgmJ9szKre{sk^5Lg&#WczF9V(iRwDeli14gc za9@nzv)l;F0bT~y1Fr*{fXzT5Pz?Bi61;1%bKkE0N6|URz8yO&t0u|}Q4b!NfY*=V z?42re)SV&oNvy4;CW?LW9TP3}f^ z)PKIGs(yc(+=G%eyN{&FJ;|P`y}PTX$-RiWyMDTC{SV(B{l^z?JI~G~UmWD#-Pjqd{>6Tv3Na>yF`;IZGvB_YG z15<~nFwUl@Cx@6YcG9CgoXYVTMidPvn;|$4uvKVMsoG();0yASvlupsU0z-6El(mn(%2i^sa z1K$IKkbWkx48WF?-36S-HZzpqaSG@JbOE{o-GLrJFQ7Nj7w8A{2jYMMgyha9#;iZV zeF83qMDE|=zJ|C0&>w>?hr5S_WmUm#guex@$QX0SG3KmP2Id7|9k3NB1F9I3dz3L| zeF^#$XcKG9varwxhzAl`l6yD8rh=Xh{0aWQz`qo3HryBB7Qpo(?mf`;pbx^m4EGws zeg+-O8M6j(BzGFz=^P%nKraIQ7tl|F&I7$3ZaLfvgjIuX0(}njWzZJhm=(s8+%7zm z)rUu&0I|RTAORQ*+y>kMi~vRfV}S|4WFQ&9Nk-N*U^;LwFbnu2-~#3W3xLOfCBQOZ zIq($lERY3c11|t;05^~WybQbwYyjQ>-U9LgFHi)$18fCKf%kzA@fDhm9sKY2Y93HE(Xl3wTNkzBiaFRH`?c^!XKK z1Z0bPV@*M0@THfwH&^J}NAK^b%$D*i=&Ln(gfi`sye)Wjub}z0&3J8P17RSfpt0jU z7(#X**|}Ry6OHnL%KF+rh!~Imz5buq0R8^Q#OX7q_tCLrLejYDc%@ML+BdyPMsr+j zY$Cx+G4XfC#%gXjTs<=&u8Zb!!@J<2QqORqgJKsGR;Sm+M#kcG%7};voMUjhq2_RF zB+=>gqdI|)VTMb+L=k@72sxN;xD+WuF4Hvu=>&$27!WIKZaCsOoz5tViPVLc`g`=1 zH9uU)<#hdq#wJ<`^pt46NFP5yliNM6S8ODe+b`j^XsTb_7)}3f@!b&)|6q$~hdWdX zg&cvo!`xYuH`Lro)Ax3B7r5=0NG~E1lu8Ri;qVth#F2)m*q+coMi%)YcETGBye%xA zP;PpOJj=4MT8lC&6VL3TElP~CAx;!Wx3PfKzJWJdOAt(jHzgqtPasi!hS*~IL=n+M z6^Mf08p*Sx$!Mz_X+^jk84)%bA0ePnhyC# zQ8^ey^rHD_{F)P?`E9mgR9*yCU2`d)HZG{10=-aT3{Gmn8f~W+tpTv(-gd1F)(!PV zSx2HgC?2xt2|q32NR($J{3B_6pV9C~M)N)CxTAiIxTqk1AB;9SfH7W4B&M-26Dlt( z1m)0%HNpu&1>iA=1Zy;y9_7>gr~%|h`Gch#LfGGK|W+&Xc|yo|X^67WDmdb0Y2yQYtuoIFb#2)Jbu@-Y1l0ucTxt$FS0 z0`GQWp+B0U7c<)eNod=JCf2T@ZP&!M>)y7@)pkA6cCBu^Hnd&%85-^SXWO;6?K;tR zU1+=7zX#l&|8Ly?zm#li4f}6e13CxSyWc4PFTAuF2+;@myL1`!*X;~LM;bOQEX(1c z`!{YT(f(qKf`6%M@Q=3aSf|rz9g8b7Gm|hqokYLfvY2oq#}Z5MVzhZ@Y-XnrJqZbk z(sO*2x1vfaF&c`tjbM|u4QG>_KC3mhtFJF^CT^f^0s9`CfWK7s5jKUzOYBP-XZ%t| z*7>5rVLin9GHFoAQU<@~bQ??K?3D0+R>f&z*Fx-Hso37&&tY@fEvyq;^_^9(mgsza zXjZT0?kw82hve>Dt=>SC57h6))Ip32F^*O2LH29b$XVxb`LCAuCL8yVYW2ExEoaT* z+5`uJg2CZ=wRGp|4WASBMjJziU_|<>iG4!B!SXH4zA92)%ABtzIYa$>i9Nwz!tDEk z_{*5{dr6Mf{{^weoBdT}OEt01G+Won(pV44{VcnxGP}}|#rZPTKz>O1M)v9v9w&iLk^Z-sg%I)t<6q9qBM?@tev>bh*I;5tt?VNkYY6J-V!q(v zw{2lg>?7MsnV)J%i3vVL!>4iB#Rk6QtIY>^wFG?SDxrMcJ^@)vC9U6BOFpTg z;YhK5qYAl@TpurVO&w`B`hRBPPP%_)90PSAB`Zk3&^4t*7oS>@!^PiILCNWqoS~6v zl)Seh{tp!$9c1h0#INsq;sS$iYNuU&4u@}pS1MKBs@=PDByZ*JT{#?DAAR|=rq5Jk z(@s^NpSf!1g`E*il`7j*Wqn5Hn5NtM3=`{Q8 z2DD?OP-TUrMQmW5iuWFf`D7)x?Q;AxTKuc9)RkTqT?m4Ep`TN@cG}bM2rJz0faKG8+$LOkGFPf`b@6h(=r;an}bo`{{(02l>*9YWXum*}c*;Bxd{wQ9M;CwgnE#zJJWz6jrKyDkfHEb_g+KF~XkgJ|X2 zntZb+xV5F}+OGvCdapNLvKvyAt7=4|_i~Bed%57?GhNumYszI5{2EGlIqyQ*xx5<8 znng_)RDIJ$m2>oztWQb~v$Q8*@03riByNzbcpX)vlc(B*uL)8?wN#njv4^v)tAlRR9Bu8J*TR&NVuoz{gG>--R> z_ehd9W9CccZ!t;b&oSC;dl~Jo>_@Lq4xn#g#>D`HaKyDV7;>(sD@V}eXwG*S+U{uY z8;NL}#;eLvG!4pj%swR1?`0Z~y1k6QfN4DDE@14l!J=FRgK{nUh#VT}-^9#4>fXfo z^O?EF-1$tT_v%6~qa5{KTUfv-#}d6qX=5Mt9;0o2%pP^Y%c$Ii0_Jy;WyXnmKEIzb z-#CAOGT)x)FQnNQGX5f(eGy|nuIdmLIDnp~T=#?PMx_63s=?cge>2r!Gef1&P6;XX zL^)?Kq5*|er5opq+EhY3RSEIOWWK3IH79yo8jm8)xyED4x%RH^y^c=qy}J1tdUQuG zrX|)&h!Sf>gg;KNT=X8r{X2LThjs|RKa^`cOVeIxhDFE zou7O~W`!$0Qo?HE6n(4Ua!Z4#9?U0Amo_80a>cRSh|bmno$cQ!;rNsBH+>LY#ObkE zcbb$do(SsP^xo86iLK=180=knq(?z%C~q7paa!j z%DD?1GzuJ)k#g+HkMI~AQD$%Bq_6um(&l@ecm=oSJ_=@*=@7cNMg25MD=Upd|G1R@-uMrtr@(J?u zHui(mz(>&hV!xB>jeH$d&F3Q@oVF)?TSIc+#Jq_wrr*bsWx4rRb5#83THyGlgdVIhXnU^uj7wgR#jIyu1hEb}Oy{np?iGlFd z0l||rkI9idedqBxT;(}EJ|#aCum2>B$*$deu!7C5N5&C`PktiV>L)w`SJgHAIFBeb z&J?A_RqvEXMtZ-9@4>1uLUjpDgls@JuUBG8*u1_;-s*WJCG5O_Qk@Q`m#ey7OHc)&1;B^k75H6NSK-&2(ZaW>ir_FA%~sU5KNu(*<#Ky zKSY~;BTEKNuFVNuEsHU=mDx2;Pk-N7r4|H2f1spcQoT|y2Ucg-$lpw^Pb@i70M%7y zb#=qd5;4DZHNKsie>1ygRb4sHD7EE35k+-sk~@_Q5^Cj;%8FR*YWjuXha#z11pPos zUn`Yszlc1+(Bi5G3nc%bGO*km^Ka5*e15B^zb2YW)#PLLx!M>=@?LBFPB~g)NKbB^ z$0Yd(W`(cPl@r<$P{Pwd<+$tU=9+@9RDSn~lF_S9uSvmgah||hf*;A8ublCoNo+i> zoGA(4b5^#@J%NC;bH4(|QS0mG=%ZF+2{RPRj?J%BkW&Z<_vWV&e(rY>71Y zxN=tG()fd{r=8wQbRr6D{tgpSQS@Q#%LBdrKE~ibNOCxA@FTH3sfLymAtpN<;MF)SgI|q)iQp)b>MWyl17FCEj8FSJG0@`Z< z2Ad55F(kG2y|AXguLoxii>_G zpDgyCTt!9k2F(d+kI^EXw0WHErI2YU!hIIiQo6UKO@EoQZj+TS(IT>dW_Gwk(ay+v z@|U_V>CUm8&soH=q(3`=9nRj#j$+5K|a?o`#09hma!kRyV)wX20NvC_5gdB{gOS&HnJ`3O_t#VPU1qiaIQ1gm9uhvxfm{v zOW=lb!?@wxNNyZAk-Lja;ihn@+ymUB+$zq^y~MrFy~%CjHgi613-=!PF;~N#;2OAZ zxBzG1qw&SWfxMj`#*gBYcn3d?pU(e*e}s4O3;4(QCHyje1^*oXBEOdZJO3KLk@xUk zzKDN^-^y?2KjU}vmHa+l<@fW4`D6SEzJWi>|Hu#0-KM)kH%fPx?ta~J-BY?}bHezA(Y>PEpnF62maafotb14Yk*-O1PWP?uqV9_By6$^jtBx0Bp^MO87$77FgN56K z;ldbUf^e6REZi+j5vB?E2s4Cxg+B=Q34av+Bs?fQBs?O_6&@Al34azA3XchY5gr$o z2~P-53Qq~o2rGpw;dy*B{zYM}@HgQlAx~H@ye@c!BHVarlK!gxrv690grgXXm>>=ohl#_*iQ*qbm-wWZDZU`C5#8e3VzIbGtQU`pSH;d! zS1C&BC)uRY(l{wex?7qpWk@TeXQXWDuhQS7m!$R5Mk!w^lD0~pN;{-#sZKgBHArWq z7U{fnN%~P@47@=ySPY#FJq`T~@rJ>M+YKWOqYUE>cN?Y~W*Z(fJZyN>u*mSZVY%U1 z!}Eq!hQAte4eJg02A`qS@R8w|;gsQm;XA`M!%f4_2BR^=7-sBjj58(}hZ#p1Q;ey` z8OB-0KN|mTe9gGkSZ4gE@iSws@hjsgW3%ysG1L@k>TZfQ4K6`Qu3 zs!jV%Uz!?CtXVRTHjg(anWvZ^H$QJ)ZQf)qHXksbG=F0b32}zZ4S71`t&o3)RD{G> z23Qg-_gH3H?z22%nQvKUdD8N%MX{{0yli>X^0sA*cawX_{pAtzQ=yrmO6cm)zlOdFQ)({A!?nD4yz%aHt*g}od-lreEMF_q zbriG1Sot-RwCx61h&g zGto>eGl;p38NrNUl9^e|L(CjzFH^^S$uuzMm~WW#Oe@2)7B-xXWV^9ZI0Ea--iZ@} zMUOv*1A(C3-#Tz0js|{rX7I0jWFbuc-~94ZM89|``>EECnEmr0b2hWy(-Fc?-xz{Dt&_kq!NJ!~l*LoW(FpgZjW9aivB zTr+=Ie^itinfbtY&Dh11&-h7&okw4D#;tTeMEqh!@<{i?1Oe;h3VW#kAyQ>lAMig+ z;&}BBjus|vSQQ`OK+u@mbFQfptdYr?Fm*YrhN&j>m`8|vE^*__xK(!`lBJO>A`{`k zkLF~$=OJdeIu0>$E0f34I4bI?97EN!Iec=3%Evt@RTLw~lsK*j=~7%yy2wVVfEeJ{ zNHA29EoQ0mPmDi@wlg>l_k@t^W2A0+Z_4iku!79wA#@1W7lNPS9XuW~Y{KalXaEDv9#> zA0g@@Og%zZC?It8pKOJ7_GD{p{B8J6fRJ?JggDqfam#XFXpJ9EQu{>uN0Kcgh-^v8 zF%^~WO^VBu2ITH7F%*?n2kB}E4g8QQrRVSnXR*U&kapc1l8Exjaa-n+8sus~$+S8S z$QR}k|6H;UTIsaFZKTtunVm41-cDp=lGR{Nx8A0M2%qdi62btJ^X(rNp_u2XBDWy_<(n}DtmWTF{;6Jz%F=q#r>@8@((9* zneO43Sd@BYzqlN=sHyDBMBT=E>v!++?r+?k!#Q^G)_H8n4ak*4lIWR3<(k~je5@mn zr>YJ?^~eKL`*;lPzfTl*^5{Vl5Le4LLWYwPVOs-%7BDbYbyszZh79SgK5N`ElK7X9+`Z|!)$xxJnRC1) z!1({`i=_vFECr`UUB-5}AGW>sVPm@t8`u|wH-!&{TH&m45gSroZ_;1*j|6O08|4@HfN4J=J^#}A$k73(zvS9+ji4YxQ3r7<-)EGq;jwS9?!y z7`oSRB$^`qqshXNG~7RyEF7i9(lp@KVuLcqw9C-aAd?AX!*H4jc>H$~Np{~!(9{2n z$>2^Bcai!C^)^*O)*|Xd__IUq)!EfEl58(ommn>zicDTiUkl6LcKRec#fZ znbZAkt53u{MfYCVy99oqeX@<&(YY(+I|hf~j)KFCpw$M=6vc)2FIt_CHe1*0{Taj! z-a@^#QE+@@#wS=g^URKU=JuHh+m-MV1Nz|)`lM~&>yt`wZWTO|?Il|AKruNGO@nJ&l#8L z9)h2a-02=lC_NZ!e^yQ~MLx6cLhIT`$lAGNt&2dB{44}GJCy5)>c~u7?$MR*+FrzD#9> zn4>zEKYimziuhv{zDQI~{4*qV;4Gis{Vefkl04$iB6*B;vf;u?%!(n;keX+S94I61 zOo9`=EaG^>h(J8LxXG4v#7ZAso+0)hIs))46doLLmf(n^dBi%?)3rw-Yc)0nN)3eJ zKSR|*9GZ0{$>*_x?5g@9hb}X_F6=_Nb8GNZd`-KWYOB>tz6v*T%+VT>DPf#dQd`?7 z^^n)J6USk@FtDFR??w}@ByAy_Qj2OZ7-DMiQEEJTDs{Dd69vkzK><-;yX#Ai_{6z8 zm7Q4gcI~NG%YB*1EB-jGn)9vk4Xvp=tgrvR zF~|?giGK{)H=2@oB@Fa=EHsPBzL7L!B=L3GM;}qKXvWJ3jcv#027ALZ57ft_HhZ+gz5gn8HuCYKrEt5}o2xI^F_ke+M8w zts;JAMXYr+_HutFayP6ubcr^mwvMB$pu}&-lE9#9SwM{{>M z&HEHJyADj7kHDadLguQa)wHu-wO4uwGJ)`-Ky+NDa(F#``v7)#yb!W*G>+|%2hFtc zNQnT>on~kBVSAs%HXV-n#^OPq=ngA~Hy>G@eY~wA9BV^pjoR5nn{uo&`#3U=^d1eS z(dw}VhXBEPtU(>t0(B63=jLOnx9a9SPLo)ERhM=%>aeZGR?Anks_{U34_=rlI96Jd zTU~7zOI1{FwftSdq0Pr>;hI8}!Bh4H&8tJW>dsL~xfUk}8 zsvuR6b(*5v(H)@&j)C#|P#+AX8~8yimOMwYVg6YIGtjHBAlx7lV`jQDJ(ylhZ>BHP zkLl0EF$0)8nF-8P=3eH0W-gP?WHQe)tC-gr5Az=LIdh0n zU0_S-#r9!s>_FDe4rPb2BiZq+gPjH&^epy4{C3@ZSf5{j{W*tS&%ViSVz%4iM`7H$m%&W7s^F&k+3-rfWFx@_HA zU9RqZ-3PEJf2{jN_o=Qz_nB^&ZjY`~SFPKttI?^tdffrtA>9$(G2NHCuXGK%)4H>; zKDX$;hW+`1E}*-lyP^9*#|k<@6pTWM5Gr&Qx(Ypo-a@nx+hLEsLl_B*^mt)1EYc3x zqo>0fJqwm-r{IDOdJ(M8PY6%L>inXxPIy^(74OfyA$WwhVR7Cfyw_%P-T|BQ=bFX& zkZ@G^QaB^D2;T@7G>h{O0;e}>w&n=U+T0t~W}AMHeyDz!ez<<5evE#+ev&=~R_E!O z-T6;?r#@Y;=-1%=oR{&2&IbJ(csFM=tj_P~OZ4yQKhST}f1=;6|4hGIU#b5>uj=>f z4{0{&bNci8?_qz&&)|rx$cqBr+cm%z9U{tNm>3~;79+)OVwBiZ93tK+juY<^r-(De zKf*fwn7CAYT6|7iEv^$^5nmHMVu83t{8+3I_lWyot3EEah~J9W#qY%*#h*nYu@Wx{ zk|-G@lN2J!QkWDWb(SKfZm?$KWeq7o8Y&HwhD#%*G17Qx5-i(Or5Vyp>3-=!>0#*! zX(jC2FGy>o9O+f*4cN9zrT3)|r7CH!R4bj5E=o70R!L_t8bS?S4BZXA4Y3Bh;SNKx zVX9#UEZS=fFB$R-uNmHg6}!+-3_JD*hHZvV3_A?F3||=P4F?U^VawJT4X|S0Wt?uj z4?q9*lrhuzJZ#t>8Fv{!H`W;s7;hNyQ!*xtDGV0u-mqccW*QC)cCsneG{ZF0bie5# zQ@UxPX|d^X({j_(rj@4WOp0lZ>2Ic2On*1MW_ru?wyD76Gi@=In%*~UGks#(VX8EJ zVLENnn~i4K9Bv+99%LSCo&ekT-R9}$`^@vrkC~U6pEl>1{pNp|KQ@<}cbIpXKR53+ z*PD-+kDD9K-HNE1tFmf{-+--i?Aw&cjYt-AGPxR-(Bj# zg9k}{omxi@)bHQ_TUj3K>cAhh|38_0P`&cCMpYH7mpn6rq+i9a#jnmj_zC?NmG_a$ zn-8kr-Ri4Uztf_QlFMp%Fv(Y{pqqll`+drvpQhid2PDKi2k}efn7cjoBI?{Xt zDiT>B&e_HW!Rh$FGE(u^UnivpGjbY)waS}oa7c=^@J%bZGI=fban4WvOtz7VPZn$U zW%S;_z#ji~g<}ij|E2<)B|N=I&ttD7rn~2p{9fgm5gU_9S?0z#tUZ_VovX6&zd*qT zLn8K5F+_RY-=8RN_+yFtjR@3A9Ref`EeIyB4t*+2i zL_c(l6P>}( zu5h4Z*yi=yR=`^2YlW0O_44URCkpiCovm{6OAX$ ztBwlR+x|B9i(JyS)g0{D^aSTQ?m4c7+kkuU?Pwe0r+Rk9jByv7vbQSD>qGwgo8WKLoKbCcn)?iE!IAPz9UCy`cckE9r!FhTdXXoy~>G@nPom+N8ns&E9>f9S5>`mif;*Tq33;Ub)W$@FK6EDhKkU5=R1{aX zKV02i4c$DX!4?~z6%_@71d}+!&CNp-F+f^H#Ag!IJ}}@oYD{8GW+ovS${~zxy6=oL z;Dkxpp$J86Qtg8gBC!?0ZbU3GCYsiW3IvmY!U_Rug4tw?diH>l0*VAI)zc|x7}BWiPbtcZXh$%1 z;fkNd9P=GAWRTrcqDIT4taB;mAPrr{?17!@*;x6T^VQB(R4BHQd$7*O_E9dGjjp(3 zW$P8U^RheUR^db$G@Gabkz=ijJrBPP7xG%MXM7MEjK1VLwyymkjE(E$Upv>Rq(CUT z4A&Faa#ZR0nsqAsffQ^35Oq#K(h6k<;C#~>Rr>{KcUqk*s3U7swx7pmQi*Z#^RNf= zQ%J7pwSWbUnMVOYWx9+pSK^!qY0*=G+3^{aA@2zG#5LwA(8KcQt!q{M1-plD_1HbP zVg4m?Mg3D~L)+`HY4TJcf6n?#Y?ZB|V7P=&b03OPjv?FuaOt_?HB|e#u2r}%YXA@6 z)3kCbCxwPlKaK7qr*dY(nr99D8`?rNR!5$}MxI}r7pB`#^$b+1&>VU;{ep@?yfZ^l zw9dg3UqT=AXBxeMr~h@03a=Khe{zWDc2jOuTZ3x%qFVFgbS?cbZfC*;MVZ(O8bD3_ zTqy5=%x8&8=UIY1rF((OH7e^W%DRBEE~LuM;BRMr<%K(Tc`WnDyBpC)?<=zoYV z&c#%0i{23WEalLA`z(}=DCDXep~QR+F?#e4X^hfXOn~GR5*G@!=rcqu3Yt^mK#D{M zi@kibP`Xj(s!e=Ap5)CECjy3_bhtibpu1zZ-44veKf-}n6RaIBqi-ymR#Ju7h7Bo< zeLnOT1W0q8wlLPx|Gp|0;m^~LBE6sHg+FybFISIMa9 zC(>-Bg;|`C>xV5dq~Zlt@j6x48dcW|D(6B%uW5m#(4mCr$p=KHSPQn3F&ZbElL7@p z{7Oo~USJ?VOAkh6nH2VB%{Kzjv4%kaYc3hs&gCQsnXpB(fI?~zviytq`M9164No^Y z7r{m({%I<4K1z7Hzl5emRK;qlW)0P}it1WTl@Fk8v+QmOg&g}FWgZjQ5`;I4@)m-( zC4^!I5<0;n{3Fxy(;z|)P>iEZiNQ>C-~cvaEdQZWQ)$#p>R0MF6q`G{`VZOZTC z)PGSIs~wOKD%BsWKT&(shan++raq-u;GKsyM204$M}0$W(hS#((M-TiJE@wPnuXAQ zY=FFwt6?=9Z0uZ+5%y?mGzTFQO;^)<=}&04q8(|ZkJ8QbDf&zL8%0BM zjsA}Qp8k=hv>I)IR<8}whG~arP1@1gaoPlEOwzUUw2QUNwb`)4dq-QWb-?n@1x?A{ zv^CI?)Iu9_w%-Qts-pj(0s^7?7!2LVaO|u`L-R2)U^1-k76v>6Tf61hkX#8nyLH%> zd=1uhZ}sarh*h0Kv8($KmUX)W_5^$!@JT>zKz)E0dXD1(Cj-u4^YW*bbs>Rafsuhx zfef}XX9ms*{IAMTbCNSsrkV)kKDV0_7Y-_~#f5 zlCe~5m)_8#QFtKMU6%NSpH9XT$z(i%+8(1!#$<@zM=|BZUMyi?)=eO@?j9=sK0j|h z+gGk|59?+3W*BbV%1)-+1Tx+3={Fl2`1pAVCM}$n)A9$gj(}16om==x!s@n$BaS`#)Fvl_4w1{l_wumN))8PzEY7~3zqnO0S{ z6`+{-16d6)6HvF;Ch-T`8rXy4TlID3C8~k(4z?>TEQA5fG-o1VK8ck1AvMaDAFH^Z zs(FyI%I^NUH{VY+O@bAVY!pr2ARG&c#vw%*(gEn8 z`zdS;DihGHjv)OkhmN7hG&fe6=JW&((m$|7gPIry#;~vYkot(Kf%V{is+Ovw4pCm} zFm;4#rcO{_zyR$V*ckRvv?>q_G_sHy166VymQmA{Wz-_ob1GJ~No9u;xm5L`szS9} zbx?I)^_}Vmn4_uHf$AVdg**Yui$$o>r8`FJejciu!H!W-v~|HcQl{>N53* z>K!m)t_SNprtVW5LH`$r$=&S#yD)I4|7W#{nsV3wGxh%~|Ih!ssP(@e+G*3DOi4|9 z$~;L(#|L42@pB0bJ#FrBe zSpR>||8q#c|L62|Sr6WI0^RR7dBCspT_@20;}zX^0sN;JAp3t$Wy~}$g=NK{glUuR zLqJ06%*^DB^m3l-eZUl+$6yp`T>4BNMr!~gh`IBq}36>!MD z|04I-ZCtlfMm|O5hX_=8F*U51iY%sv7gMHU%2-U1`-z1_*bX>uY!!xCr9S4<(J&T> zHRxkVV4pwGsfw~*>RY9TJ;kNIl+Bm=_zBwa@&o*MT$nJSe!Phvn>B$Q%SYoG-9DjY zyd3BnV;`3<^(sI0W9y^qCrID6k8O|6Mme~)Z(NpvH6T6i6~cagcqDH^I1B*|_IM8; zZja~V@XZ_8cs`t+$h=DKB#8Hf$IGK#@pTiWz3Po(Z(7{eL$Bgbe)m3q-t0l@7=s3t3nDfzSRq>;jOniI} zUHnBCKQV_YzS@<6IQkM7>54C&e~BCFiZ=`?=vsTJV(q1tP?Yio z7l~4e*Iu%aLjxKhm)LTyVuOTHY%o(j2IVt5N8t&h6jfA^DTlUFQA|eW+E-pWYw8)Ml-(}!(1LujCwQ} zrOv9$UQP~l?Bb#cEo1avN9gvDQB@(MitdTY2PyWj0VpUCMooc{lqWI$({0YcYt@k_u^I5UZscULZ+yoE}N2##du-SerhzBu3Ka!$LUF@epT1gm4oCK8Ph& zj=_vz%!x0>`*3sZ6M{7Ig?6)~y}F zDQgvZtL_kbt*6M_7r5oxt+wgpP&aKeh(nMP=`2WwL>8n$3X8S3!}@)PV*fb}M1o`W zVEH{UOhGK8+9NWIHje3yWgd)Um^daojwy{L+@&}>k44#ftW_#nKG;e+up))^d$M&bsT=tx%(JI;egG-*DliyZhJ>Hk1!Z;X`p@4$283h2aL7pnUw}L!v{yee$?* zp@~rdB`c(y56%ir5km@a+R6{1t=8cu9Ae=dnCphLjb+1mBOAdF zVFx>hL|O+&#)y-U3>R^vhbQq7ZDZ^a9)57!SbKzd(l{j>2^dmNLN*R2Sz~NR_W*9& zki5veq5K%u$d6@*fFi9!BF)c^}hq6(J{$FZ1|*(i+PVa&mCd^GML3Q6LJwMCnlAIF(% z$JNK7!=f-eNVF1>gb3V98+DN?=Z9TnTF19d5Oqj2j*XTXgtv{yuo~6|k${iX4wXZb za9b@IY0+&Mik1{n>oi6iG+oB%3S+b>`!_?Pi-$y86gxPA)=`&7v5bcwjh}mx_)$RZ zD1J0>JDML=$MB=u?y<#klnHGf#f~729>tC%m>3CyGr2}&jkAyN;3wKX!WSRQrK=!j`|o1%H@zLR`FAlboH)+;b__Vd$bu9HhY*rA z8##pctZ&B)GjmoZGkw08#W5A{##l=yZ0098|AIsnTVq-#;cjRBt+d_=MIZRn7R6K) z##o&bHgBKcOOE&0vmxC)NDqDcRU!7@NN-Z)@jNPdZ{qE|W_-11PxFQU2&KDr_Wz z-igs*38MN_%tHLlm@#eI{FD^5cFv3$Gq^?<*S3#q;%>uJM<8kY&)_K|@Eo}XPX&R8 zt1jf~H*y<<9_zugm{?NuZj1w%QR9ZK=05B3K8#IYpRnF~x=(n+dZy3%WuNdCc|2x4 z-zS7wFOUSdt#cW%vlU?tzZ<7IVotb9xI0=2jHlf~aGX(==11Qd;L zX^^g41c{X~?OcXLcG)QK>=iIhxu~`^`3if*;|{W2IVQ_sd-({GzE>JWPL>Gp_0Z=C z-z@c6*SZ~%{@+bfAA!yycIszt9!W7LT-_*r%<1pj~}?SaZ*tiXZJ~&t;et7?%RIEpT-R;hc-;&? zC&%H__rL4!>+Ecc*$`#^;R0ngv|7jznUp||;3iI*hygn>>HdLBY~#sc)ccvo7cx`R z!4Vn4bmtN-4gQ;O8yqH3e$A;|Ut86~ zJa}q`aX5Nt|2p4rLs@S-0!@62L6!8gmIlL(!q~u6b@}d=l-R&>+$z{%dbx$|nEkc= zYme00{tf?)caQC;B{cl{4{z-umtyW`3u`!f30+XK@Bw4Z=||(N(1v z`K?=8>Mtf5yWZX7e0L90^e3~O6(3ZNn`2zW{u-o@Tmh1fZ%IB!ZVV7WT8yCzhbyWs zn`ll-)O0qNoAsTb>9&=ow) z{2VVYe=Hz`9tR z3oUq4EZeptalQN!Yh+ZPY}?_zPkt2uR@2ZQBw1hL@4Q@jh(}h<(ocw0O)r)pkT2ql6EH)p)0h z2Jb^6?M)PQfZYh#1rxxoH_E#99a3}qPN@ln*&@6K5xU5vtX=Fb+nbSzTbU4gpu>Md@tGE|W`?==?%SleMcXwGR>O zE|+NE1?7MV_nr-*aP647?tPm^m<3eWx0U6~BRmyDsD_OM8NCJE;B!QA`iLd3m4dM%M^@2Yf9QznC+c@f2wX~26c2zs}G8?ap za|Lx)4ZD-y%kFU2kbcEvQ*GVlW8vzryv7iY)C@PQW;A&jg1(RqjCLPB^g~(xKWJtv*?c>ZFusQRfs=XLz{bDQ7DHE5I$rUfU3FvOJE- zIw%f@a~-uu49+gCv~Z^Ea?G&a`I5doyCBJuEo4}-&CUCeUjg#ZrGJwGDmIXB{%`WV zN^!V5@Pd#18G)5`0UDRFv~r_ZOocP$hs5C0O44ZD0hyds&Oa=x9rFt;7zq0@5Dt)m z0MZTJXH!`cwZZ~(quXC14)`&nyh1X<(H{yL0I5x5ZgMkMJhnjQqT6;|oWzZGRT>6! z23KX>WE|C=kNiNY`LFK&p!sC<8fam@^eg2cT_r!6x$Xl|C@L1ESddnw9Pdvr8I<&+ zZl@ykoKXVxI-Vz@WtO=r?e7z6 zv|-NfFFwc*4q+vvw2MN9bb+rVda_DO*U&oV4+lkBcoNv3E`863NVJfOta^ywrR3%q z+>j%b@UkJ_tw#&ySX}Qb;XSBLEOUuP)jph0=S!^(KK=viDIZ^E{lX{IT2K0%yM5NP zK4+!R+Tvq=cS8ItFL-I-^1=a!ig(JikOC#ocIz=;S{bY2KeS4|l~BEwTaWrAwJoq6 zXSO}%|G>Q4AkMcQ_Oa?sjlMh$bMOEYbeK7Ipfs>SPHT`KEeXiaqw@lo z)eT}Iv#C+M7yTbr66V^$f*s(gsoz;2AP+?-&HVC!7{Y956a(AC7+a(56q?Z=+)aXI z+>Mu1+)PCGF2N^-c9r{-5FZI4@U$KlUuEQ43##X7)LnabwUy-l^T*-v=M!N~Ut)9L^x+9~ATjp))X|j{49$3Z;pk z5sU$cZh}Jt!C|=bXswlsa7wjSRRl*%0abtV6-|h!I#yf6MC2PTJ3sJQ<072ZzA}A_ zm5wOXOX#AiYF`l@fhE0ykr5FJn!2&PG)AD66PaDLVj61V4JerpN5Omq6m^5yaKwg@ z*m!`Yj<9MXWFJ#oD~>eJQotI5z)hM6HX?5@kXDZ^szc_?MvEd=Ob7*vb_;YxmCw{5 z>wo!y&(_nvTfEBdvRL>eIp}uhI8XXQ=bs{^OZcesZ$7r(xyQ#IViq)tJDJaFw}0Tv zM+*qM?*Vn!)k}dO@47>>k#yG%1R+CZe}?xtRh8f?iUuyebC&w7Vquf(rDWOi&?BQyX&xiJj8)DTqCKzMJnkl=g>O2%{iTyROjI3umZ0oe6u{P346oZr zs^bQ`oJl#9-RW`R#w)uMdwWh?%601-Igph-gi_dgq&JVKv;NHoV6A(6m<+0XY>2{? zJT5Uw)(F!q!gLE>v&1q}6)xyqm?!ePSSP=mt>Eh+x$%b}yCK7_SlKH{N5CX^vGpG7 zZXlmMWUcg(UJrLhN3eS5_y{)0c~1n!OIi}{dagGgIp_$g0r_$m)8AQ~Wxk{~DA)l4 zO8%P*{UD3=}*&EWoVMZ3UlzbAa1os7xeF$P^lAhyxv*vV}lBSD^@gtX@Iqt z&j4A5NkK006dfUHpzgCMVlYL7jLH-UM`VJH1?17DvVz}G;pHyz3?}}e&zTm65;5)L*Coh6boZ_+FN5mHtJX)Fe zuaU3ta5>!nMIft`b_(+qAqBIwzgdYf*#E68hg^->+lCuS%IuYL5GG6!4i65=4HXxB ztv|E_QRCwwEUETxK$K!ntj zZLj1E{A2*sbJ!Uh!6DQc7XfL3i{$GeHt>h=I?OqNgvXF@2)wagr4R_0l~P<8O2Y3L zbhXLipaeCrDe6e=P+dTfvat2aI3=P*X(j(CTejU{)%U+`I5ePrv1^hi0G5~p*+2pKChOoraim|AarXrjKo9y@M_ z%)j$;BlwWSk!ZsZ2y1Au^8%i(%A__LdD^r#2=GLt;Bbpzgsfq@y;am;<<}#1j)Nn6 zqz{F3Y5<$5gv(5F6=70aC>vr4vgx`m_~2u-)rZ>`EgM5qAUqBZuM5q#%`T4(EUQ}4 zfEzKVhpzPh&kmg)IzFm&*zSAka1{fS^|=_whjJtAl?WQi7#hXlB}1pft9W}A9}>RD zzQ?AnuPPlT=y~%Shsi*81V}+7$U&VLDTQntwrfP4YChmfIkIJ2@bo1JXI&5!pt3MvWX2kGjq z>l-mOywWH{IB;qCW;m*%*aPP1qZ})!O4TJA*1fSl?-0MUVyDr(vOizNVc+&fpZWDh zF2Yrv;&BflPJTJu;b?bYCV<3nq!FtXhngF@JMLJu?MW#hANQLlJ|@ht@TF3$<3}!n zcch61d5o+2<GEss$o`n)Ex_yqs<^VK1QBN_%cB9_6*%95mK138_m z8afaylXp~H0^;*m!pD<3Y$H&C2@<*VGJkKHHePy$3qc;RglcnIlaezRIsbT6oKPC5 zxND40(+Pnw(zDF3ni}N8jNAmCIta|JnlQU+TLLEQUp0~7>wJ7#nG0hK!gDaLjtqp{ ztT7v#*m}PZ&75o!n~{dUcjZ8`BqV!KP}T3`bm7(Z>a;ZG{wCW4KNY5d2Ex6eufNe= zqx{s@fJ?eCiXlKXG>I{&pEEktuIi$5zTI*5YIM$36Bg~C@b|{5uz=r37VrCvSo# zbby!^%t;mm93m74O~Ig}oWVATOk{4y4t$9rcOVE{eg}u)%eoabqhs|bqJMEw%^unf z@?>gG>{hY0H7cXER?#s)!JuaA*awB@S&wj(^&B;Bcwwn00k74`FfLMFJ}-`%=IRb5%!sd zqjx00y{jZ#C%nPwCZSU-OzuG&?VTb8GS?*=Eu>>9winux8unvg;&D_{%*uKQ#pxWa$LAF0a-keQ%qLLV|N*)JyTeL6- zFsV>sBudeN+;ze%EWBx34>RUE=_h!h#B8f(>bk`%T(G^GDfvXa4}0%;<%T=2UBM5= z5iZQTSLnkGkIIHfy<}^lD2^=F8T}DkWD3y|F^2CH-9vRY1_3DXYi`s4--Xnn&jtUb zT-6wy@AoU96y*~-vxW_3b!>HM4HRL)B#ktvK#JwDO~rrA)|ekZhIzVLGI0T}>Qg&? zQW&I#c9@`GB;$rL;J=#4dHYH~ZvXh(7)pj5U{WHnW+%ucT#Sv&Dgi&iux9Vg;xSi| zw|I!pZ9Z;jRg({FY&67Sw-Hw%gGaT+u_Z{+b}!3oOF*4w3=O`7orwFJcuC79n19jC z^K1eXJEFq@a%EkcTt+{Zpluj+oZv)bUf#^S-pn|f*Ggg+pOA)S&V7DfB%Ng+7+9ujdJv`r*U@tZ6 zk0kLT8Ve80^)3Zx29q3^1f!^GHnAj*FpbiQmI8S1PLQ9hPiSy`ViybKC^4=9+lBnT zb{7Cux5u~dORkYG>`9-1WJ5eijc?e5CghuUHoHDaPLw2%q#H;aA8;YSd2zaNe1SJ4XFSg$!r8qH)jfj2^!txn0uKQiJx z_Uf{1``&DieJ`ZU<;{K?Q2S|s*>FPq{$C`7sD45)5lSfX`9L225q9|}B(Ut$0TSTf z2iWf`U@HR!UB85ofH+R+?m&4RM|skuAM*SvG)x#ekS;VV%;8UMu_+kCzWy4na}ibN zl=mUhb#z#Il|tiMMteg1oSA>()`X!*ZskOD1IM=S;0%DU00R{T>vLnl(j6kmlHhH{ zr|DJbXMZ0)O8QW=e^MYvdZg~Z>%g`>>Gz-m!+z3%uYCIVU59>Cs!6w3oA|ha4rH#K ziLo$)Pl%5z!$5;c6CaZa%!yG!W+6iEaL(icZvaQN zLDsC!0hK5TfGv}M@{_?g3A0yb7&lna0bwsR&?ove(3nujB!fvs)H(N_NJ|s$wLsgi z#bylIon^V*s=X?s!Qg$%7UF(Kgel+_)lHSr1GTR-#cKMDdGm9W2{!7gK634f%}98g zJcxPYGjSF(>a!AP`o-yf?)3!^?sWv*>!`_T`i$&;)-%8ROpNL0t0E>9FiwIAWzAYz z`Q<30{SFV0eWN%$90b4NbJY3J9d(kb0!dZF#Pj|-z8_8pJ#c-e4Lh*~)6Yyde z>6?DW>VxoEov8G6>{|Iqzo116kZ=eR2PCS!%16JD^bujvMLVGz!X?_bbyJFNi!89- zfg%GsuI+n#M|S%pZDXZR4rC#JA`ZGPhCN6+4C+8M6RK2Y{8jsu$&FBh2Z}&MH2Mg& z5FIQyI;Pgxuuuq#)jsGq#W(_V>>Hqe3YB6hfr}O)TZiu^ONe1)38BL>1WO2$rF0v1 zhR|kY}viT7>6 z*rkCSOa^|nA{@W3$X-1d8V+@h>_ZZ*q(=(#`p?b3I@wS1|L)bum$B95(5KD%^4~!5szl zJHvO#ovs~(CGN=H^x8>=Zs3e2EFG}?QC1N4%I&Y6G*3NgvDKRY{UkR8Yp&`y9YC@? zrrjZ3ZGT_7#OZklt|>JTA(RW^(GDzlE)nSm;|k)>&%INUqwd5WdO;_;a-(w>=%m+ba@SgnD;#gdFiZDfw+d} z<$Ew#-j5vt0fq=j%~9A2{ba$Z#8B7!#h?kKy=<0iOL%vf?K>`*#01?DbF-EkWf;x8 zIV5su?qK6RW5$l_gPzlNKjgL)X6hH>6a20^QCg=cs5C-4W=7YpGQG?^@CAk(dB=Vk zG#^-%kkmsEL^d9vb$ATYnjRhfcO+ZL?C8Q53= z%wSQ3$3r#+Z-(9gn;D9XLcj<#4Xk{`5rh|bn2ayP+LADZcI!dF1jd~un0`DcsiM(G zzTXF1s`eeho`$BW+}9*Pi9oa;n>Zt+-4`lB(vWw_FW4j0A)pAa)W4J=x{Ikl#pC@@ zt>O;L@exQuS_efjQ7jYaHdSaMNQGf{D376yK4XC%x|iFs4Q6bO$8#&&xHq?Q$GJap z&D@E6?gUQc6cK|qj;klfa*iJ78aZ#tpSa@{wVrb1tizIn+g!1a*uZ)B!+wwJ%j5d? zZRMKEnRicbB-%%DnnHw6@RNxaLe@J1@YI+eI1QFHl&oq)l~pbCmorS|X(+)aW8K0l znvEoVZVDrv&L&Da#9@fS)oi$Y4JCtKD&-`yXDHwA*FUB(Klq>?_{RcCBEl>xvrQHEt;6%Gh!?^tN_bA8g*1N!_SCO=F_K1c(@|eYaq3dP>uQ8 zX|hbIuA3~u78-LGbZg4A#a7$C8ko4gBr+@-)#Dh1#@_#B@!&7X5gRShh`>T%5~lAj zF@3*-bt4GpfRR0jWn;Zn^CdQsVN5aUOOl&~4yhbfRU&tXr~VPC+d*?*GAq6WazvG- zOY@~u^QBi~yV$R~B^V-kK-`rC*SFf&4=y>DR4qr5=F~kRg%7NRFwKB_;@?0kq=8l( zvgAFILMAFKiK??p9pLham9aaD&az5kH+Mz zW|n8I&snBKZ|7i(*Fh{XIWHIbQg+sAX6?GH7hh!X%1kwUkimSLR-1OAOvo(i^DtN?GxQ(%t;H*qYc51cKCPj|;>xczS6D!%E%c>wmq0zCtB z%ZhLDC9~TLV*MTjon3vgNwB>&+LcYdU1+#c?HyrRyJwMQkC*If$Ntt2lm~^C(eoa(&ylzPGqP zmJ`F>AF;p16LkbJpXG@)FTSqAT$iimVC(x12Npxh{0kuh^s=kZ!SUr>KF7((+?4xP z{o7mXPzL@#&Q&*aq!OM)^IS?nN?}TM3yg!{?KiG#FReO>wv@*v>d8@$0=VMV7gTTV zQ#o#KEiXs`Rir3JhVHW|@qI_*83@5v_gQi|@DvmRMyWy}1R48~djWG@#yDz@V!pk; zp`uUa{1J}Xflg;`)E13yHy!(%Ep&G5TSMqAw0Y$D_)C3;;I6|_P;)m%;Tt6*Y5!gJ zv2Qq3xU(3ACO(6{Fc>Cw^>Kj?b(%P%14jmBlk-fUVerH+`{MVXg>6!xL!Tx-Kw=yQ zX_O;8KFe(w*Ac(mZ6F8gI^qwUm4|f1*PfNb96``!z`8_($EqKxn!2-wu9`Dv*&jz< zKP$J^TtCa+tQph-i%RFgv)&Zj=NB26A+vqu%roaUC=i+uk>d}!rfD4re25Y1+U3&e^u8z{`y zGoa{1ICLz-DpI@YY@akWyL>Btot~(Q@hxX2w1~v%-ZLDOiS_jmd!COH4|Ep9hKDFOR!fH*OF2b+mf<3 zrbUM?Pbr-8rU@Rr8;C1&t2atdE5$gyQ3@1F^EdY9eGgvQ>ot{&51?NX6P(`j#dT*r z_Fj*xxA@Fi^1QA*2eo(_8=`E-OaIt|v(>@@hpRTIfCtd-Z)6 zFjB~P>4OJ_inD$3nkd7V0`MTk>ikHQwJC}Og>@Z?lCF0(MM;+h8uVBIH_x#A28!VQ z886kFe;*}i`bPyh#K)+5NhFQeir+_VB~8J%_2?~p9=#KvH}ZY}K5xiL6)`RHBb%it z(q%ZkLc4Ah-`fJWir-a8Q8;>aEUIdJOIg(fg)%M|qCX3^AB%!z`vB%*Eb!B=40B~Z zz)kA`aF0=5Q{I|VBedeWZWW}ZU9Huvr&`@@Bfq-8gWnHYuz=h!!R@zz2a&S|H^Gl| z!NGz05I79h1&2B)E<#9@G##$}v0=rvt@-Xi`KoI_S-Fj@Z6yJQR%b&i6Yy2J^Dy}- zOG{&$3u84{0ck{4KGZ|azd6#%Haoo}7GBVkE(Usa;`dfhE9~(l?ByN9Tz`z%;~&S` zqPEp8B_C&xEB5$y$w^q-!1d^y5oY(!weG|eM+D69VN}1?O>FX29l8zpModj@D+2K1 zPbgiCX$iEQa||M}hg@Ehd_^T#E{#WhKN69Lp|lS5zgsR`&IqD_>wv2~y(F5E!@N}@{EC))RS z;rC+#3vw=XS6JMfO42!(xGR>qIZd7vn=7lKpr-5x3jD7g`+@2E zZF*i}4t>R`?FZVW+n*Zy0cQ7C79q@0%6-K&oQJ_cG#Qq$Z|I*u(=qCNnEr7LCB}c8 z#1ca6dP2!#5P6WK4;at0hYYqqU%F9$K>7}H7#C2K?j{Bt zqpM!+D7rTQ))&Gn$Y_40!`pPcuK82$_^IQc)*ayvdXFEj`}ET~u9R!8J8<;qr&S#z zFOt(hMEV@~%cZDu{ay>hPx<3-yEH>0cs08f-|LUR?a)k#SKo@KD5d<{?#z^U&8>KN znFuF%K5M#|qkkM;5H#3$tG-XQT2uU?9D%AIxlrHRhVoigoJN#j^I zmUY+#ku>Iw7ja4Jx2t(QB&3uOYJ!u^?%-!iAamByCtze#oB zf1E(JbdnJ4d6n!h>gg0>NRZ}EAwe1OPzaBN zBq8I^^LL>^Bv6v7$i5#bGejDsj$hor(W0SlBngH?MVq=HyNeVsO!S zokce~i~2hAr7O1(aQa)IS!eyB6U5%r>D;8T5-gZ(R0?UD2#>HnTN=frTqc!X?L?%=+`>rM zRdI;9@f&zGycKIpNT0BFcm3y*%b&XbWMTv}zOx@VbkjrMm?wWDOi03}+Pz7l2JLiE zn|1IPp2&VS{j@`Iz&Misw5~{s=TFoX$_#%xF_b@%wBmGIVQg3$;6+{apTVZcg99#R z-#2LLRv@AS?O?YiSxWYkwzEa-RzgGJ6(@*z-qQ)}GM;bEzxcMQr&Ee@Q!);fhu-K6 z{k}7_w^KH?f8mcUb=P!vCiVW%DdG%)`Q>lXV?T5%f$&gCCADp3x4KoL9=pJoZq^SeCw7*lgBXf7(yNf@(3o60P;{-8l=w}EGZma^ITuTwRotd+6PG<59X8P1r^W2PN<`HHb zwjQ#rKjPobs3a_}B$dfxy%Dwf`>0L5QE*K9Llo9L5=xAUyq`JCIi$c-b%!b=!=&UCjk!|j~sc4oQ-HI@`>!{kus9Jj+L zFvS;waWD~O&|SqB0y|m;OWn>JQ6@4=Gl#o6@E#k67ooxWeV@=}z0qer)HMaHn9fPG zsdIjYJeJZEwH4g)<8KeFjIkna<33PU#)q)lwQ{v>+;M(q?w<~RWNRdA-{$5buCa)y zG@6?@JL|>$H7s|+cBHQo@+G&KJMQ2bQOF4>-#FKA$=df*uDS1c-_66g^`?2N7b58X ziW7AQp|Cq~5eafh03v!UvHP*=#*TP|rBdc(p152W9Ff}v}mAzVdwl@f*6$nYV zbib_q_EZ1HUQ4r4+%FQuF8~vH*&{lu{FNiHMkr(5#3LWRXl(SOZ=5 z({h*;*(H_1>-hobGK6qb7KB*rejY2Smj~s$gKcVTyh`?iiryJ#>PYHi`=#M!uKiw% z4a>b_k~An^x?Di`GHf&?lcj?I`I%rKKz`8$|L|A4*kgY9h}>_qXr9HX-gNi{ol8;V zo&2Nc7Wu;vPA`xs4Fnom8%1ff1{?}Tdi>K+iIh6{_OB9-*`?RXTQS*PaC|usqBUpqDr=yPt$A&AEg~(bY&c9A6vVcp4Q)pDt1{QQlJ;Y*XatQ$ zu-~+Q)!xpxlwR0Ebzqs&!FQzMDH%%IU9IfJ*hDgp*sl!+{$g1y4s|N$ZrF?M?c*-4 zos<|}@|Ek{7Ru96|Fz+I-dE;@S4{l5tglcMe;yWKxbNVrtgqRxoac?WyvaQ8ia}TM zmB-^cCkK{%1#F0hj`pwcfBiSIHc?}4yKJ(!&ZUre{T5aB7K)=}Lv~peHEau2r5d(H zRi%n7+pTiHV;h9+NGS7d^Syh-Ikr^rxKIcnsknF}!6UpOC1Go7Dx#AR{h*f(E&F0>bhU;_7vXd?{u-X-J33v3um83gY4$c?e+@dNhRvDq6)&e!q%M9&O@f^f@ zgB-of(YICTbbW*c@`yP4On+5*A%ywhcJFa|_|NPe5)wE4BG{5I)3 zhT5yV$vPOO(AH~LEW$z*49|=(SlMPF`gk((w-GH|v5RQa%!23^ovR4bH8w&v8xZZKn2`7>(`UE7!zP4(iSK-6}~Bfx}JqgH;wlCxb(7 zd!HHFZ4qEe$8TdE>lW{UB3cba^jx-9xZ1yu%sZ@euk!C(=Uqis3)(Y~IF{XyvjC1Q z2e6UIm$DxI1J+AS32Kc_-e|2eIzKSN(8-@kHIQle9hvS->`xX*l3|m1Xt$_i_v6?Y z2^J`vFfXRmgr^&77F;dE(lO^M*^}1e{5YjfdL0MRrS|?fs5ueVAYB2VA0cB6r8XD} zQZ|x}@a%HZZZ-Q+gVe!)B&igkjV5*a4>}3+{q6Q2ctXz|B;bnyiL`V6RhY-4lN^RJ zfRLzbfL-BKd>7&rJi4to=PFc}%%tvYeXhxZgLvU$SUE|kC(t1r6!e7B#}31p1y?1N zhlm(TI-Qb^SmTle*m>b4ZgbJT=0n__dQ%&h`xZB#H?2L+9dB;Nd{AvCdeh%=7E zGCS?Vv_t*~4RI&xD$46g0A?fn;pHv-G&{Ij%tn}(Fpc1^OrGnWD$d@tu$!6EBR;ly zQMVJXz2AxdRsAX?H($lWjjh6rLca-+Nz!1Wyp!jwoyfn?xvmHh?Tywl*!S6Dlf92uY9p`c^M&&g|Yaw|hIHbGz9Wj?C=_oYohNotfQYDiUpe(TLv4dl7?RExWF) zBBR^2*1irJ==K-dU&P=*MrUSs(VA}O-0q^>?oaHb7mMuO8uLMEGq-xb0<_Idnf3k%pB{H{dSIo;OfM(YZr zHQQ)iX+#aqjBbm90RLbjWMi_p87Ztlq8;xfhU;_78@Sv=Jv5W$P@OVm79s@IeZ)Zq zs^z%q6GTA53y2uoO)c1N!gd3Z(Q*mDJkf<+PY7LPF9UxNpokpC9Uy`e2RY4yt%yS` zcVrXS2!2{r+uT&U|IiVPlU|Oy$mQme!MCM<)8eSDBKNJMZ*L`18~#T@&0H=D_{YJA z67lD~MxIFe4}%Y)+nZb+wo)4_YByIL_Ymj+l7A>R;@8ewWO!$nOCUL|bn~0N=CR+K@B6{*`O!S#ruq4srAtbdG6!zjRF;iP@|LoXmo6(=j&D)kxGZmZ z-Q&_aep%fTetFwcTegGRzNSZhs7mgsTT*4{MNmRvd6liFOd7;5I|J?1@*kxh+c0t3 z?JqIuc51P?fLY%s-doNuDMsR@#aPHLE0&S180$15*g4Lr6q^ZnGb+~fY@98}A@GdcgU}xhy<+gjj2c@{`Nr91`bLf1b7Trt zW9aRiO4&4w_6G}}X&^?Q8LXL~!=~|>>{I+~Nr$ph*i<>ZbhZgua#U;z^5jr#YROZ1 zGx@aGTy{p%#awn);YEr~7Xy%d7Msqe)Xm^i+h&Rr_$4?eHG@szXR@hg=M6;6LPWYa z2pEQ%k)MUAbT&1KPisqIr}Iy>rLs@9PY1@HR1!qpDk-dFX6Xz`mEW*&PF|*2^FtD! za#6+3;Zsp>rfmp6n}7%i>*fHywoIi-Fh-i4R3r9~gf&u+k}`4t2Xe^m)Z*tBg%+M6 zwD4@{5?SBEh+5#vpcO8F21=H?Rkl!hvRh-DCeIbx5oAKSS~o@0+G0}o zb7BxmMvS4Cea@WnBY~jJpR$dle9V?cP^n}#^pecBc=6{+2vSm^1QHa&FFpg>cob^y)B{|U_m6<37y(O5m+Uq4 z0(k?0%MrM|bV*HOuRWU}6`+=(X5g{hBdIzHvB+ED@pA*xwf$U5oJ5$E6I>{^9GU8t z5MY1)`P0paCxU}3SX$Na&~O>24zWxAkfZI5$xPw5f_lC7@QXuU#pg)L#S z0sdhb+XGk@+=o?w`P-XbMvOM)|WuGBk8?@u5)&;?NMiXua|Mo z?!Bn9(Sllv7v3Xrfh2AWiOVH%frwK{2JjX{g13-Zs4a=%;Ims+NGkHPgf6((&l4lms=2^4S-=?92O1IO~X3b14r01hhD?Ke^R{F=$iFA#^2??UGV!&*3IwO?EmqHKW_Qcp9_n&{^i}` zzrIIqmnq>(KPVH*KivK=6?r$&-(!HN@BT0UssAt6M=emR;>KlCRQ%N5<*F5^9q);Y z)C&SME7U9KwJYe571Rnf0v81=P?5-$jS+apJxyNElGgIXjplGFA!zx_YggqgTk=vC z$%0_D(Hub~1i!p`dDgO3OV(vA?+>Sq<}fNjm$Q2Pl2thafjWQSFLPdeF=zGj{V5Ip z64tEGTDM}=npbX>!1xm{Teaqn#8ZssP%0r{)tY5XR`uu4HJS%e34zbATC;Q@ES>_i zAyk5P*_!43fW}k(kmfAUTK!Vaikz%<{`~P&Kd8&rtbXyOC97Xj+7(X$R?@JX)j2Qa zpb4*Kt?Q2fyap;kkF+mk{SsyM2LoJE)`ZZNengqoMQGI{XgJ_IB#(xAJuvm@dFfC=@4&R?=_HL&IH27eaxy;`-hB0S{v zitv@5@D#I-iZ@KntVUV8!Vx}d-3n@DC3#b?#e*cLRxXcNP0gG@C5(Jx%`eyHtU~+O zy!;ZgW(D(N)(bCZtzMSJtXccwJ*a?Mq(mPe324p5^!rOp+&Opuf`5Qqc_ zr$LnF(MY)-{z*u_^-3DGl2MH`=`DSW=mi0Yof!a1T@-+%^a`3J1v>mM>*@5aK0?p^ z)dir5XvOL9wfGnE`swhMUxd>urSNID8ru&MqSxVHoLc>VOoV7aho<3$_|^L7h0$u@ z4AB-s)IijTC;cR~B4@+PYnhkUFzd2bEqN(teHQc5lIIDYfN(%4hOgWXjHBq4JNjR@ z1K{o9D;xTI=5dlxjjmZijasVCv_t|KwCZ+cGw-1iB4@67=_eI1O11sf45S5FN02@y z1))NEy*ho!!1sDJ0YQmd2X3I$5=yU7&m2Up2w1OQ5s=A7rvC!ykIS86o&>C0RtJP2 zoDNwZjL1hKR|HVg%tNRZ!4~ontOO5QACTVBm;NBhwqy#1bex)Gp)#G3>7>UAss@2M zkU->05AIKZ>R0F&g|0jhjvl8F^9;H(Gk6#%K(BnK{~K~Iri?RDWE`oFBuXFW4_r(s zRV}_19zw;%`#;buLi|cmXzzbc97q+nYM_vTd~vJq2%*&^&99XZAkC?CjS}|yPr{TM zHWw>p;?jR;#Ip#!`bo;49RlmaagbfcADMAFJu5D|8sE>(YIF zi36EXUO)NW0yNV9wsuj_0-9R6H+&{dEu!(eUQNBWH=J-eQ1o~z2JC4?#5}W>O7HF? zp@7?f&^XmV@HMao^RHDa)T^lw3-#!qKqr>C_$lV!DKw~FIx}1u+zL6ob~-$LO@BC{ zuu-5eLa7+ox?z!kwx3;)bWh$+M~Dtd7yqA8FRA%nb#Pn@SD)pn0sMT^uvh;io)K;w0;s5ZK{VgwX%p^|`@P70s2h zWSBJ_ZPUN=jJ8K}=@GGzBod6IFeJ8876f2dD87Xs>QSzi=lJVs*~MS2Mog#)cbw;b2X~7gu_#bgo4zFRG*zQY}p?r3$^%8jxm5+hb@qT!!^64C;1B z6fKPDo=cfA>`03YJ9Zh?)H)+6EsvTBa@p7H7HQ2Ny>vztbITTQS<%F*Sk;gTGBRGg zG8$zZ*u?0TlQ}qKe8pe>GeR-zWO2GhwAD$TQMKEoP<2lsf>9x*6cLS5qyf2`4~m;q z1>5GOS=mXMF?0)6pi9D_Hm=#{)mu$NzftQH{uC`A_buDJ3ka$CkQcWt2PC+bXC!gh zAxntdET}o;mADRg#n&_93mb9O?qsf=YOZ&Y9zgFRBh;u?YNzRjOL`ao$y>9SUZ{tb zo|sYiB2=K&ZtwK9x|ji1UlFMYL(2&9Sut?<4zLhY|yi!PC}#$rmaaDU2}8k1KUD$ znIXEOu5^fo5O<|Ql)FaLGEVm%bv5YrsLKe^W#pP}AQf`%-2Z7>9c^hf^-1q2Q z0Xe^;%IwU*9A?HHQAaxCh7fn8GA?(Gre)kgy}qYBN9i7(wjrf|E3yxHqS9{_*^fM0 z>03p1BbO?Do5*>{ex)B4xe~cR>6=7ej7)cDUrTEYMC?(AR7wY0Rr9jv{*RJr1n(sH zeM-MiqH-bcQ2MV#&PCp=^t(jXkndM!w(Q8aDSeli_dvc*>3c-(g}g!Ow~JhWyjJPo zh+K#qOJ%DFxkl;R#k>M}fztPjJRTWU?GSkiGOF4v@?>OG^@PY1kx|uCBA<$ks$LYi zKQgL%LF56*Kd36FW{ip=4C7*sh#l2O9QyeMQ4Ny@#I*&}|I~_pxk-;1D(mdi9kPPM zKn8DgVR#VFlvRX+HhkKHema%3{o2B#>_e}&GUB8ExWrbHAJ^!QcBxh!UG8}Ae`UF`8{@yBTkxKt%sG2h;!a0b1&0Ma?PPr+!bez5p@NpO0OWJCzriIcU1%jP}uY> zGG%ZsW`3bb|JNv^sw~oEr}fGRt$nygi_W9{|CT(Kux7*B)KrDu<8H=MdG&c}%<+sd+=kj&=Zd-)M?Dn- zSjfZ7X^fW9b%>#?yIs%j(2mwXh*`Q>61t6WuPR`S+aQxa5|%2dwjy%V&rgy;3t4PW zn%gX${JB1sal)$x)@xF~q_Z~anA^xO2`nMQ3~QKV=CL?Zsrw41o6}5g>pjLa)6*C_ z&>Dy;Jf^21Qqg#lyTV@$>q?NWfC@C<{$G}a+Y{mUO5t~+7bI>5dkyWxY%)bTKEog|#kibs>Hq>{AZTaFz{iXwU}tbR z&Ga1SOVAD;N=_Y!#n>pf!nNg16Z2G#^&?M7CV6qwU#QrQA5OJ=vJz}Kx z1h%{TV=JAYxQgR}Wkbo3zk*fIlzSdpNG+^3V?#YX_hp|xZb}V*=bbu0E@xHr56)Cb zIA}o1~tBjKB z=xUDPs=chvZw)0^BuZ*PbhrFDGvP)G`;Q+GywTJJ`RHs&IBf{k{Xj-oX6$S@ zI5jgTnC2R$BQvvtX^vsa;?9C{?iLt#9?6VIZMjLM?KNMe+eoWf+M#(;!zyKxXy&m) z7D6mi4J|iX9I6;M)!%stq8Tx(gjX2zbnK2 zNSj`MRNQ+yxKGDz=5a>{JK}yKBdqt7eo}dLD(;hvxOa7MKe>axp6Xzij>pXZ{tkA; zvpFLk#)xCu@;Jtb=k=rAKbqm5G2+6JR>+d=lO5a-RVvk5PAtz?H3wMA93P~W zX}IEvDqYap!u9~Av81{w+{#*Sl$kDzY;=yS?`BI(JP{807`Gi@49^24<_I4d9AiKz z?ljy*?1UF_(9cjK4b4>dUaEbt-RDJh$eqM+Z$DN#{OP9D)F;- zJVVs7uG3OGf+^?hebiN_ofU78Zksp)BIT;t=br6jajvZQta{m4lZ}}b%*fMG8Ggt3 zagTFJnVB!rrJqlyQOLjnxp|on>y}+UveNPb&jz+hQCxW8&;_iYl6~A%kP$A%_MB=y z+gDR-c&jtKz2Fls;+z*~QA?w4qi~F(wQIFCUfok+Y*h6_r%_cr#fzB?wTtJP61VP_ z8ZWEiHQu~6HC{E@=taeO%5miatT1N(gl!emkQGj2o1lg<_o-6bB4T9(iIvo&tlCXS z$6f2ij4eT}_%e}Xa9w|Yc_RAi0N~2%3o#5S0&rS>_==G7R!lc z$L%7xV$Qf0anS@KIs6&W_C#P9v8mk6EF)^iMd(VI{h7BeZfTUiO5Nsi`y-hHnzk}K zSuE2)^Hw&x&XAd)dE0|qCT@FDx4pPMPUeHAZ2`B%G9@%`3%TtkvqJN>h}(2u9*8h+ zk%gg1HtkG{I3up`kA@kW6;e6xUH>DAu1}|~ zdwFIC3`ZKT8_8lC15g!yWcc*cjg~0+iZHk=j47%c6L;fQlUpX9x0<(hx$Uj=E#|FD zZt2zTk~o|atSb<@r`1RrEBO>doN+8;ai+$5NjW`8Ud%?*i97YRl#XgElu#|>hjR9r zY-xKNN@1|OQw#~j^dyEAlE+b|;UOPEhBvV`F7t_cP0uTkaWr%J_7Q+y#R{A3Fr`x{ zxh$ZjMxCCxlN+XDazmoHVdq_L{45GNIoY70X_V%g%S4z&)Oh1r5nD{;aL$O}3?seL zN>!bvdqtk98GRLy3E-6nM;UE(_#S)jJ4 zYLpT@z(x>#c}ib0!&oe8=tM(UEKYJ%$gCIv-6kuC%m!F8z&8Bs7|M{sVx|%^s>L!icJ;Ag#k5vQ~xVSoGDJHZ_ z>bRN1r^~xZfuX|=L2r`ABXex*!k6}o%abiYQhDO`2>n>mC-mc)LMb`pg`$#-UcpS; zGNnI8>9buan)4Xlza9vG60*%uj0R!vyxkl1xiDwI)Qi){MAR26u+{Kiy5O3;mzm!X&+$_EWQ zBgX%eG9+3mNTGhvXf&EM8hbpq#3!1juP~I$gDL8hidq=;QNPKnnfOqn((g^B^3n3e zsZ=u3FxACOjFdQK^kr&ZZlpHen-Lc|{wE`AYpM_aBkE$rfzk@4zL}Ly8mX~^Iwh5i zq5q7sqPdH{q|j-XsMFMySpgnuWod3vDyaXx-qT^Qw3Ms&PgTN7v!r{8*~E?&QyQF9 zNVHjCv;&$K$4uJ&Hkf`{L~ZxmXqquNF!C%dE8?W`vWz5+N!tC~Ja)P1pPkb4x+2b) z1DTPHEj;76SXNv`vV!wfM2lo;F}5YC_jTDkpH69eJ{gNT%xoR%RM_Pq2Ud!-lmuQz%$)`g@Fy>509Mg&R^v8E;taCb1}j!nvl zJwlq=^eqc-2m8w!P(+)TH&;hp#VR(a=3`%MurZ~f%bamspu`y|?$c=eUCd&4$fF{~ z?pU!zN~3?ZHB#&s`SJ1ngOlW0*kfp{@7P@ zgv$|Mu`M5iK8wZCYi#Q4bc(S-aeJgVGRW9vbeV&3Rt4!K2{tlla&Uqw>wgBbjrv&K zYJa40MMHy}OstkE5(ne>a$!~7%IYRI_#%TM#rC=q4or42wr$NWodvD{iR@-3l9g%6 z;$kCwj@7UxrqAtXX!R0fE_R*q_j2R!hVcUi$S8v>H@_z{2mQkGajazXY_ZonjLuk| z9uc1K6N4wHvhI_bjZYyiTTySODs%hMbR}Ip`vq(d8L4xG-fuOFx|4b7j7>1wNea{< z$13b6(*-k$3COV<5^#~x^)e3W9BwVb-PG>?rsQ-?M`)E1`?`uCPsFyU<-yw_g;;S; zg@!5#Gj1f!7n{!mQB`Puwti{(qck+B-d)U#xAr3+r_;K$eB`VBz!%SsdRsp5MZ5eP z@@8bp`-93|-=0vSN55XlMz*9Ths1?$cIsD`KbcB=zL8cV2RJaYVBUP>i{|6+JIWDN z{G>ewd`RdL@V~kUjcn$pvq?JB*$BPr(61<;uGPHDfs1!pevne=YO23$TK(xP$%Xv5iAwJgl{gv4nj@R=oT5;^N}IW5w3CNf zhXyPP+1Or3(KW3=s;F6s=(Oe(84ZFOlt&E;U7n?1R(`21RiSVd&ra7LvvzeeFaPpx z%E+K}jFRLZj}N|K6z1jS8~;tJ>=yp0DB4}xb!L~G%3RHRKK%w+Tf_wl>xQ#b?qv~V z1FM>bR~7&MUV-GN>z?dhYwTVdT|R~k``PFZ^=yrHH-n$r{fCM|Y5EP!i?B}BvsS5R zW|a>8*{0tpmLD0GbUm4t&)D?q%Qvf&Dde^3-)h>iXl<^^(-}y43ZW)YV4$u(s2W1p;%9pu%6ASnrT-NK_PBCC2fdsnI8T z3!Y_E&aD+vSGTdBMtu;Ma=X=-545$$XivsesDiPWq3=*X6e4GW9m*In$hgHkav*~j zBRb017;6Tk_th%q^_$y8M#6M)osBMBj*?4)vSq>ADMqizF&cVY;rR}xjH@T0v$qnN*Q;6Umi^L-<11`wP3${E%4T}f{Sq-I)VUe%dH zlk>XF?ZceQo66}>SyQWHdDS>e=81V#ohRZQov++zAi_>P(-{x@>3^Y4%Q98G2MtY6 z7zJ~I@mH(hwCiI=c`<&zPo5OUDncS--WD(DpvC-{&vbK?7V%o7VjfY%fpj7Cl0xu& z$Gh<$ILdpJwE}0nC|V%1d!ArL!?k!(#6#PQ_KJ9-J;Jm4M0-Sww0I9g)#HO#wT6bb zM!Yy6mtMnx*j&=ypG%(S^MVxGkTkO*hTNLi@KrvJ2@)xD=ChiYv4&E+R%#5GZ7E}X$M zcT-#vSi%@^U%-JNgOl5`Ls3kn9_e%zRApaMes^VwXzX~v>-F@ zsTsb+cSi+hPeh=6JDI(kq&pRwImgRbeoEW1pi`hq9GMF`Vr3{#4L42>lk2PG2`xv4 znaVlBOZ!M?Zj8iI!7pr;wPsCpW2`mj%5rwDSl(0-9G6jcnZvhreu;@F!k?d#o>_cq zjO~xACK8TTv4Cwanq=Elr{*0W8ZPss_KxbRmM@M}HT6qx1ck@?!vQ}t@kOo8@5pwI zXy~N0hKiVbx?>ueqz>tFzH@Wmv`SF^AB|*WsH-i*;lV>CpaBw)Jc|OUd1Rv`GSfp> z`Xg4U($;2ymu3~mvzUPDS-te^0zII`9CBxhPDD2|(-O`!aqKwQOBMGs=csWdW-?!9 z72%3L>GRw5X$OrFt@slk(^;)S9CBF6bh@+;X6|!8=BUpU&ZCzV1q~(nqbuu|#AIfe zaU@lVmKOVs!+UIdyGSQFy163Aa0%sI(>^YUX3<^>P5Wyqg0~ne+o`50BX7kdn^kz- z*7Cj&<-aXEnQ@1-RYi%UO5)^&klPAWa))1e# zo7XA)Vjn4og+qhqtME%x(@pQMttulYpSOl>Md9_QwcB!-s^zfP$Qtd6TuO$n8&4XaNDo|ye)BCpaVtr>8Nfwm#4h6@ZF>Rbb{gPp+e>S_zQZt8@1*9dL z|69i8*N)4t1ddG{%WlgKg-qeJOvtaDkY9-_eMUua2`_d|m@#qEj8M4Nsb;GwbcFKW zh^?@>#%Blx)9En^I?rf`En6-xY5F6}nq*rzB5@ItI~AZlyn>0Pc+tdf%0`YprDB^d zwNLErnf3$Q?B}HIU77ZDkNltBO5%wxl`F=%#dSW@DA3WSiz>c5Z4;U*H@L)Spa$t~ zAAjW)8Xi<`g`C%Xw~zM$kkEeWp38KPcr0^_E1NMZYkDpI>|3{QeP`@p>mf< z9=|$P&B+1tCDMqo)1Eq&him>z1`8w&cl-2jIrCTRGjGxf;;=+5ZK)(3B*$yZJm#y$ z#zwxp>*_bdF$4TT2ZrWw6AGxZ!LypGmR64$VpKo>{A1_OSvY^j{NW21&Y!+;q5q_& z#wF$c`MmIIya%loXs6`!704b+8#PjC&yG==|5T+d!i@KEH99=)_^wKu2kYSlcn3Nc zD(z&bgmrKa^ysFvwO}h!nj7Z8d2l7%3J=3hcm+O!R`7OL8eNLU@|yN$Po)j*rL<|V z2|k6A-lPHEgIRr)wiK>_7h!W>rO{Zmv9K7{!ACHvpVBUcKSF7LrCkgMVc;=J+XY_^ zP+IXorLBUmAX-eG2Pw^7fMWH!H_M((WNC?ukT1z{B(KP_Cz8lN!Teg>+>oUbH*tR#et(PEvv3%`fKGOM(hs9y z8dO3IE`eL%x9}po17CsLfqRENag0MH2RZsCO1Tbm9FrKsbvkxuU^m;L5{qClRKp5r zf;gN9YhfMy7(Wl;{!!$u@G|@fz6PgLB__Zra2oImY+@!X0A8|9(3K?`pb1t%0@gcK z@=B*Su@U(?xDkF1cfteMz3Q|l-avjE-h+?e2z&;AgKwY}a{i-74XQ0_X;PU&6CU_U-_IxK-Gtbj&{LkpY_>tO?Iglph>_!;~P?tr`Dx9|+?f|ubiyah+# zGx!2p!JelQxsVUNU=SP&0T>CRpaLeqDR4S0ffl$JE`y)KJ@5xO0I$NI;JrMR{22C2Yj(zApB}gIpi(;z&NyB`dKF^Jn2X*b4{X5c~-~ zg3sU!_&fXqoF3XRbcSxw1N=}5!{K;10ZxJnm;jSuDzH|PnBh^$nI3my7V=z}&;3~* zUt$R|$1M`epbl0*Bdo-}8TaQPuR*>5w>Kl-3b%28KlcwKKLT4|8@vx+K#`X;z+ysYiSxVCUjxta#1)W) z8{jwa7(5Bj!G3rJ-sq~5pLFe;XhqfvRbpVFN>O`cuoPSkV%Be)iR0WV?a?dDDv zb<0Z*=;lt8cB9TgMK{VH^F^?@Ti@hT>{elZF6_qcbIiYjZ@cwPKo%2=HQP zg8hTU88Ev@CFd3OO)NpKfhO+HE$W-Ru&7IdF-GF2@N>8i7;7Xp!?UmtK7dc*OK^6l z+(8G%9*JQv8m7Q3SO9gf8rH&9a0_gL2Vg7w0bYbXa0uRoPvC241xFA1Wnf&D?9!ua z!iQW0ePJ+^LI6g>DBPTg8OoB$`oM3@4n z!6JykWpEw*9DV_}1LMiWz3?DB43EMS@D%KTJ+L1R!K?5Fd;ougZ@|%;@&q?@g8?uI zj)f6W0TW;rS-upOR<-LMZ{hY#Un_$z!3 zu0GT+@IrU!1%4O;qv1pt2d6+7=Df1N*4DxfZ2M)n&n7`LoOMHO*IdYNTp6KPLE&5e* zEb;{8$uO1spg%vsBrAD_zi(m=*K@HypX&vFdvcvWE3qDT8@Rt3`|FTzgqz`3xD9>{ zcfq~zAp9OS!_)YA20y!yUxYod9}dDRa2Vc%_u*ss6utsSKiUIyh63mYy}%CxVK9sY z<~)fpPyy`eBxb;wuoP-xB_!ZtSPxgh)o=sc1iygW;a+$U9)~UPH0*#sz;4(JufaQ@ z`jdBf2sXnucov?61K>G^_6yap9M-@^a1GoBzlRs#CD;c?VAueaD2G!a3{?<;CO8)^ zgo|N4Y=EobY1jcT!X7vXZ@>}w7Hk9QTVMo?gE`OwKY?rEZg>u!htI)POxhtI3Sm0b z00(&zx5Az9IBbFKa0uRj55Yc&HVGa$7DfYWS&7-O1kQ#StcG=PBissi!^7|-JOwYo zTksi_me6isJWPetVIkB(Gdu*3!D09WY=cQR^n$)n2FF1?TnOu71KbF|fX%QK-h}rc zS0_#w0kfeNR>HZk5pIY3VJo}@Z-Q+Id53)H1p}c3hQo1i5-fzpa5mJ#IdCQX1a5@e z;VyU(o`7fJ1=tI3!-v2oLBauU7z86=EX;(tPzBXc19h+h8etWzg^h4MJO_v2D{vjl z^9Bl_2Nc6#D23x-Jk-Fsa54NCu7jK47PuYmfyZDAY=f8JOXyU_vlRR=5Qf0$3|ink zSPPfIweUE+1h2q{poXJ2$N>-Zf__j8gP|0L!SQecoD5SS2s29H^aT~0BnJs@I1T@@4-j#DSQp~<0&J^hdwX@#=|6- z4f7!atKect!q4Fzcmj699{3A<4caKm0rH?b6vJp32dBbpI1?hU92#L2tcCS(4O|DC z;Td=h-hdC`WB41mN7DwN0Q$lZD1#9&8YaRiFdM3%8P>u&xE!v98{i@M1MGuW;9d9# zj)3C?@&VmJhoNvHOoW**8_t5Wp&lCHJh&Lv!!O`Ycn}_jJ@5*=3x9!+;0SyMe+M;& z@jB!~A@qO&a4ZDIsN|F}_CyeQ2F!$cun?jUgH^Bw60i=gfE(bKa68-wzk%PuqwpmB z0rtQFI0T2`O?V%^1norTchDK~p%4baP#6iLfGzUGIG72u;7m9d*20C5gd5;?cmN)S zXW%*5124lL;dOWm-i0IZE!a+?44@Nqfg%_HgJ1}Zgi%ld6W}z6KpYZq6Wk5=!9(zS zcoKHNE_f04!)x#cdrV?c*vVFZkVF>o@Bhe>cMOoN#)7nVUCtbmnp z4qOQ9;VQTqu7_LTm+))Y1oy%N@F;A7XW=E-2QS0NC$mmeZclbC@0~0v?~~|RPP>Kv zPzEDmR5^3t@~+8g$g^PqoQ2t%a(g0yybdmfjc^^@2tS8k;pWcru89YcAA!fD!?&2(#^xs+V^z{MwojtdSo#9!3PqUp#I8T`K;#nS zQskj995}m?7!OlmI?RMwFdw(oxLt-^hrDuZ-$V=7^SCB3y9D_Pczvg}u+zSuD!#rFKI=?%lsD?CGKSa{4nn_v{UOdW-nN_Jd(hA7y?@omuDhgHLbY9rpBB`*!SkaSl_E zXZCF0{^IV}ckKUF+HI>1M6{;Uk)9>dD|^Z$zmment*Tgg}E`XdZo zvOLnXx~Z(8uBLzIhLy3VlKxYwc^$meziLHeU8HP5egDCoBP;5wQ+4D2mpoeO{9z3& zTi&puG3GZ*zO$cyLx-j={#i}c(UoiDnN!qf2? z_4HZ6pm=KY)t=yKRZD7?)mQtcPD~~GyXl-ZZo-tQ6VI9uoH5}vGp!jxrz}SYCd>#L zmczemIc?H3Bklo#5#O~ue&lJUeNth))@pl@_Q{sl~|7cUP~4h|HJ>?_rQa{`A=4XQ8^}jZ{?VfsyW|RA*DVV zEyT23%yA>XSAu#DDW+M2%rFWpWckl9|bZBBbOZAW(WE4GGb(>61k z_^nymm=W)=ObwZ~8S!>#?GkU=vk`KKcA2tmk2lpY+clQ{g6WF-K{0<6^`x}+UF|Gi z5jnfMx*@Hd;V2*@huF&RA{Z`62PdLU+xD0k&+!ta^#6PWW?4O7n2A>L3j@YaA!NqZ z6l+|$#2-5=;~^n&GAM}n887fmFkEMvHB`lFIvV1+j=s60A!)2`u3pk+Xw;*|>Zp`{ zN5e>Uyv>j=yBd~1kdyQ=TQh`|Bi_o4R7d@cYL=8N8GKBjRK&XalC;=V(v%jLl`J#F zrPa6{e9W*?KT=akgCXK;amnJe)0&bRL?bb&2>8j1x{|6$q_LFW*;rcIEPqzZANeVY zmBc}C=*)12N=h5}w$E}g&J3icx~gG$RpZ%a>~bex<-yOgrS&E9Az)I!V%6|cqk2eW z-{ar#VK_G8ltB1tgzBoM>XQ2ERdU;AUKOueRwr>~rh%r)tF>lUjQ49xC1NAvSS@K- zT@q=Em2zaS-JE)oVQvI3Mpd!2)1#t@tytO6P~9lyAzI;m-jXUqj4X>&GfJvTQ8c++ z*0gddR&s|sxvS2+tLtD_m$vIH)#N|9YyYS6UT2rz|2oV>^_6^cDy`%*{j@4e0Q8&8&RkWbmy+LeQ|bRr+kbSp30Hg!J#B<&{z9^SpK_~9+<2JvgF$L(Gh$mO3Sur5$}(OVDi9{lZoe$2dh zoofewavpl=0oSC!x_9qvU8bfU8Tjs`K+<*FTkln>8t-m>?UV(4I!VJ^5ru7e1I`NO^pA@d&S_%a^s~d&ip1{7seizYY!eyp5&R+0_`Q$_xEX zzIrMC-ou}xMs1P!O6PtfSs=^>@@Z>T!|BiF0jhNV*HNv86Q8D?5lz(Y=j%HCIme^o z@`)L}ByQJ>c#%dm^9=-hb3fv0=9?LO`$)@cK1O_2dX1#vVmK$u<)=1EPxv|&Um!fo z_$?V*>CiT#(uy{bPa->2&CD(0EKod{NdL3{J@nh(J@TKdf$)tUDv(jBd#aki7Jgjf zI~Dsaso1sC)o_hJntqP9X1XeEJ-=YV+)i0~mV9L+mL1h%e5*H}qhDC!q}I>t^nG?0 zr0r~~hBvSsB`Q3}$A?+x+4Np`GTMq>WHdzn=-ow<7Ml9f{SP!0Ue3XB4{xP(yhe#j-B|ITzQMH^n_3J1^DbW{_GM6-@=Nj(SGHo!A1C)76Qa^@tGMn zya^e=K#C)a;;4DOwa%_@DQuRnMU$f})MV#I3c~A|&CdnZUhknKTCVqmK9--PTEIQ! zbG^qXpX)tF`P7i~9R+-wY@8}?^0jz9#rNm8(O`C7VqDXj$>&lYVKRKj`iJ9rBALza(I>TsCnz}xUO6k^^B`a=nn!HKxx zl%duH>tF-i4*vj78)_q9Bis+q=5q>3sbs!#CU`Y0(G9voPv{MOfp0}6=vEU0VGwRV zRawba$gye3g|^(}YFlpNH#U`gp6g3o-@xnx5-bMZkd;~|}Gx!3& zf^VP|G&{R@z|%0%3G%=T1<(z8KyUEF5GaFTFcL<=7&sYNs839Q$uJdyFau`7Ea2nM ziTSVysvu%l?JN7wZ+&{l&WRq|4=nLNyPbu9XL^Z$@1ecMVt=RhwR>sp*1zx9K!2Nz z|GKepvd3eN|DJyFg`G2$n#-G|S@lkR_~=c12EbNNXE*w1%B}dMVE*VU<+pqokI1iL z=vh1f^em0HAEQpE?&kMV+na|Si&C3hb^Ck2uI0L59L*^}Nt>u%b0lgDHO~ngofwIC7 z)9xmJRsCxJ+10D%W2Dv1%VK4C4|nqf^b+%}sr+zFRcsK>>gt$Tt*ARY^;YWwjWgNF zYSk-Q5367;tcQ(oBish}z=N<^Ig|Uj9)_=#J@G9)irv;L*~eyVM#-L3y26U0J-xoa zTr5*d1C|CX4OkkmG+=4K(txD_O9Pe$EDcy1ury$4z|w%F0ZRjx1}qI&8n85AX~5Ee zr2$I=mIf>hSQ@Z2U}?b8fTaOT1C|CX4OkkmG+=4K(txD_O9Pe$EDcy1ury$4z|w%F z0ZRjx1}qI&8n85AX~5Eer2$I=mIf>hSQ@Z2U}?b8fTaOT1C|CX4OkkmG+=4K(txD_ zO9Pe$EDcy1ury$4z|w%F0ZRjx1}qI&8n85AX~5Eer2$I=mIf>hSQ@Z2U}?b8fTaOT z1C|CX4OkkmG+=4K(txD_O9Pe$EDcy1ury$4z|w%F0ZRjx1}qI&8n85AX~5Eer2$I= zmIf>hSQ@Z2U}?b8fTaOT1C|CX4OkkmG+=4K(txD_O9Pe$EDcy1ury$4z|w%F0ZRjx z1}qI&8n85AX~5Eer2$I=mIf>hSQ@Z2U}?b8fTaOT1C|CX4OkkmG+=4K(txD_O9Pe$ oEDcy1ury$4z|w%F0ZRjx1}qI&8n85AX~5Eer2$I=|A`v-UsR~nPXGV_ literal 0 HcmV?d00001 diff --git a/PLASMA-SYS1.PO b/PLASMA-SYS1.PO new file mode 100644 index 0000000000000000000000000000000000000000..62db753b9d1ca7e0a1a595e9e811bcb2410ca5b3 GIT binary patch literal 143360 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 literal 0 HcmV?d00001 From 7f9975c4429e07e5687b947854ded7922f0561d5 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 Feb 2018 14:31:09 -0800 Subject: [PATCH 32/40] PLASMA Version 1.0 --- PLASMA-PRE1.PO | Bin 143360 -> 0 bytes PLASMA-PRE2.PO | Bin 143360 -> 0 bytes PLASMA-PRE3.PO | Bin 143360 -> 0 bytes README.md | 4 +- ...{Preview Version 1.0.md => Version 1.0.md} | 60 ++++++++++++------ 5 files changed, 44 insertions(+), 20 deletions(-) delete mode 100644 PLASMA-PRE1.PO delete mode 100644 PLASMA-PRE2.PO delete mode 100644 PLASMA-PRE3.PO rename doc/{Preview Version 1.0.md => Version 1.0.md} (66%) diff --git a/PLASMA-PRE1.PO b/PLASMA-PRE1.PO deleted file mode 100644 index 35ca3c791877728750afe35fe585f4a1c2997934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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