From e6c81e8c8d8ee0cd889cab6c86c35eab17b5d551 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 7 May 2018 10:22:28 -0700 Subject: [PATCH 01/24] Fix unhandled IRQ on IIGS --- src/libsrc/apple/mouse.pla | 11 +++++++++++ src/samplesrc/tftpd.pla | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/libsrc/apple/mouse.pla b/src/libsrc/apple/mouse.pla index 27a8d87..6d5193d 100644 --- a/src/libsrc/apple/mouse.pla +++ b/src/libsrc/apple/mouse.pla @@ -50,6 +50,10 @@ asm updateMouse LDY #$40 JMP $C400 ; IIGS REQUIRES THIS HAPPEN IN IRQ end +asm serviceCYA#0 + CLC + RTS +end // // Check for VBL (timer) and Mouse events (atomic read and reset) // @@ -175,6 +179,13 @@ for rom = $C100 to $C700 step $0100 params:2 = @serviceMouse syscall($40, @params) // + // Hook CYA IRQ handler into ProDOS IRQ chain + // + params.0 = 2 + params.1 = 3 + params:2 = @serviceCYA + syscall($40, @params) + // // Set values // slot = rom >> 8 diff --git a/src/samplesrc/tftpd.pla b/src/samplesrc/tftpd.pla index f73c113..2e8a9b4 100644 --- a/src/samplesrc/tftpd.pla +++ b/src/samplesrc/tftpd.pla @@ -260,7 +260,7 @@ def writeUDP(ipsrc, portsrc, data, len, param) end def servUDP(ipsrc, portsrc, data, len, param) byte info[24] - + when *data is RRQ // Read request // @@ -345,7 +345,7 @@ end if !iNet:initIP() return -1 fin -puts("TFTP Server Version 0.1\n") +puts("TFTP Server Version 2.0 Dev\n") portTFTP = iNet:openUDP(TFTP_PORT, @servUDP, 0) // // Alloc aligned file/io buffers From 52baa5c01688cdaed62386e3e7a45a1c87847fba Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 8 May 2018 07:10:13 -0700 Subject: [PATCH 02/24] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 95f129f..6d0917c 100755 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ Different projects have led to the architecture of PLASMA, most notably Apple Pa ## PLASMA Cross-Compiler -The first step in writing PLASMA code is to get a build environment working. If you have Unix-like environment, then this is a fairly easy exercise. Windows users may want to install the [Cygwin](https://www.cygwin.com/) environment to replicate a Unix-like environment under Windows. When installing Cygwin, make sure **gcc-core**, **make**, and **git** are installed under the **Devel** packages. Mac OS X users may have to install the **Xcode** from the App Store. +The first step in writing PLASMA code is to get a build environment working. If you have Unix-like environment, then this is a fairly easy exercise. Windows users may want to install the [Linux Subsystem for Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10) or the [Cygwin](https://www.cygwin.com/) environment to replicate a Unix-like environment under Windows. When installing Cygwin, make sure **gcc-core**, **make**, and **git** are installed under the **Devel** packages. Mac OS X users may have to install the **Xcode** from the App Store. Linux users should make sure the development packages are installed. Launch the command-line/terminal application for your environment to download and build PLASMA. Create a source code directory and change the working directory to it, something like: From 7b2d5df99d04cbb4dd9236ad95f22f7bda414330 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 13 May 2018 06:18:06 -0700 Subject: [PATCH 03/24] Let fileio get JITted again --- src/libsrc/apple/fileio.pla | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libsrc/apple/fileio.pla b/src/libsrc/apple/fileio.pla index 3036f5c..db299a2 100644 --- a/src/libsrc/apple/fileio.pla +++ b/src/libsrc/apple/fileio.pla @@ -1,5 +1,4 @@ include "inc/cmdsys.plh" -sysflags nojitc // It's file I/O. No need to hurry up and wait. // // CFFA1 addresses. // From f59401f767eebf7b1eefeaed37e3655bf77b5001 Mon Sep 17 00:00:00 2001 From: Steven Flintham Date: Wed, 16 May 2018 21:28:36 +0100 Subject: [PATCH 04/24] Use constants for zero page addresses in JIT --- src/libsrc/apple/jit.pla | 9 + src/libsrc/apple/jit16.pla | 9 + src/libsrc/jitcore.pla | 879 ++++++++++++++++++------------------- src/vmsrc/apple/soscmd.pla | 9 + 4 files changed, 465 insertions(+), 441 deletions(-) diff --git a/src/libsrc/apple/jit.pla b/src/libsrc/apple/jit.pla index e22301b..7dde7aa 100644 --- a/src/libsrc/apple/jit.pla +++ b/src/libsrc/apple/jit.pla @@ -23,6 +23,15 @@ end const jitcomp = $03E2 const jitcodeptr = $03E4 const codemax = $BEE0 +const estkh8 = $C000 +const estkh = $00C0 +const estkl8 = $D000 +const estkl = $00D0 +const ifpl8 = $E000 +const ifph8 = $E100 +const jmptmp = $00E6 +const tmpl8 = $E700 +const tmph8 = $E800 // // Bytecode interpreter entrypoints // diff --git a/src/libsrc/apple/jit16.pla b/src/libsrc/apple/jit16.pla index e22301b..7dde7aa 100644 --- a/src/libsrc/apple/jit16.pla +++ b/src/libsrc/apple/jit16.pla @@ -23,6 +23,15 @@ end const jitcomp = $03E2 const jitcodeptr = $03E4 const codemax = $BEE0 +const estkh8 = $C000 +const estkh = $00C0 +const estkl8 = $D000 +const estkl = $00D0 +const ifpl8 = $E000 +const ifph8 = $E100 +const jmptmp = $00E6 +const tmpl8 = $E700 +const tmph8 = $E800 // // Bytecode interpreter entrypoints // diff --git a/src/libsrc/jitcore.pla b/src/libsrc/jitcore.pla index ccfc336..ae754ca 100644 --- a/src/libsrc/jitcore.pla +++ b/src/libsrc/jitcore.pla @@ -183,7 +183,7 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin VY = UNKNOWN @@ -226,7 +226,7 @@ def compiler(defptr)#0 if opcode < $20 // CONSTANT NYBBLE //puts("CN $"); putb(opcode/2) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin VX-- // DEX @@ -235,7 +235,7 @@ def compiler(defptr)#0 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 if opcode == 0 ^codeptr = $98; codeptr++ // TYA -> LDA #$00 @@ -249,38 +249,38 @@ def compiler(defptr)#0 is $20 // MINUS ONE //puts("MINUS_ONE") if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $FFA9 // LDA #$FF - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + VX-- // DEX + codeptr=>0 = $FFA9 // LDA #$FF + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 4 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $22 // BREQ is $24 // BRNE i++ dest = i + *(bytecode+i) i++ - codeptr, VX = resolveX(codeptr, VX + 2) // INX; INX + codeptr, VX = resolveX(codeptr, VX + 2) // INX; INX if not A_IS_TOSL - *codeptr = $D0B5-$0200//+(VX<<8) // LDA ESTKL-2,X + *codeptr = estkl8+$B5-$0200//+(VX<<8) // LDA ESTKL-2,X codeptr = codeptr + 2 fin if opcode == $22 //puts("BREQ "); puti(dest) - codeptr=>2 = $09D0 // BNE +9 - codeptr=>8 = $03D0 // BNE +3 + codeptr=>2 = $09D0 // BNE +9 + codeptr=>8 = $03D0 // BNE +3 else //puts("BRNE "); puti(dest) - codeptr=>2 = $06D0 // BNE +6 - codeptr=>8 = $03F0 // BEQ +3 + codeptr=>2 = $06D0 // BNE +6 + codeptr=>8 = $03F0 // BEQ +3 fin - codeptr=>0 = $D0D5-$0100//+(VX<<8) // CMP ESTKL-1,X - codeptr=>4 = $C0B5-$0200//+(VX<<8) // LDA ESTKH-2,X - codeptr=>6 = $C0D5-$0100//+(VX<<8) // CMP ESTKH-1,X - codeptr->10 = $4C // JMP abs + codeptr=>0 = estkl8+$D5-$0100//+(VX<<8) // CMP ESTKL-1,X + codeptr=>4 = estkh8+$B5-$0200//+(VX<<8) // LDA ESTKH-2,X + codeptr=>6 = estkh8+$D5-$0100//+(VX<<8) // CMP ESTKH-1,X + codeptr->10 = $4C // JMP abs codeptr=>11 = addrxlate=>[dest] if not (codeptr->12 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 11 - *jitcodeptr @@ -294,44 +294,43 @@ def compiler(defptr)#0 i = i + 2 //puts("LA/CW $"); puth(dest) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $A9+(dest&$FF00) // LDA #2 = $C095+(VX<<8) // STA ESTKH,X - codeptr=>4 = $A9+(dest<<8) // LDA #>VAL + VX-- // DEX + codeptr=>0 = $A9+(dest&$FF00) // LDA #2 = estkh8+$95+(VX<<8) // STA ESTKH,X + codeptr=>4 = $A9+(dest<<8) // LDA #>VAL codeptr = codeptr + 6 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $28 // LLA i++ j = ^(bytecode+i) //puts("LLA "); puti(^(bytecode+i)) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if VY == j - ^codeptr = $98; codeptr++ // TYA -> LDA #imm - + ^codeptr = $98; codeptr++ // TYA -> LDA #imm else - *codeptr = $A9+(j<<8) // LDA #imm + *codeptr = $A9+(j<<8) // LDA #imm codeptr = codeptr + 2 fin - codeptr->0 = $18 // CLC - codeptr=>1 = $E065 // ADC IFPL - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X + codeptr->0 = $18 // CLC + codeptr=>1 = ifpl8+$65 // ADC IFPL + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X if VY == 0 - codeptr->5 = $98 // TYA -> LDA #00 + codeptr->5 = $98 // TYA -> LDA #00 codeptr = codeptr + 6 else - codeptr=>5 = $00A9 // LDA #$00 + codeptr=>5 = $00A9 // LDA #$00 codeptr = codeptr + 7 fin - codeptr=>0 = $E165 // ADC IFPH - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = ifph8+$65 // ADC IFPH + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 4 A_IS_TOSL = FALSE break @@ -339,28 +338,28 @@ def compiler(defptr)#0 is $5E // CFFB i++ if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if opcode == $2A //puts("CB $"); putb(^(bytecode+i)) if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - codeptr=>0 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 else //puts("CFFB $FF"); putb(^(bytecode+i)) - codeptr=>0 = $FFA9 // LDA #$FF - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = $FFA9 // LDA #$FF + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 4 fin - *codeptr = $A9+(^(bytecode+i)<<8) // LDA #imm + *codeptr = $A9+(^(bytecode+i)<<8) // LDA #imm codeptr = codeptr + 2 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $2E // CS i++ @@ -369,21 +368,21 @@ def compiler(defptr)#0 //puts("CS "); //puts(bytecode+i); //puts("-->"); puti(dest) if isule(dest, codemax) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $A9+((codeptr+9)&$FF00) // LDA #>STRING - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X - codeptr=>4 = $A9+((codeptr+9)<<8) // LDA #6 = $4C // JMP abs + VX-- // DEX + codeptr=>0 = $A9+((codeptr+9)&$FF00) // LDA #>STRING + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X + codeptr=>4 = $A9+((codeptr+9)<<8) // LDA #6 = $4C // JMP abs dest = codeptr + 10 + j codeptr=>7 = dest strcpy(codeptr + 9, bytecode + i) i = i + j fin codeptr = dest - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $32 // DROP2 //puts("DROP2") @@ -396,18 +395,18 @@ def compiler(defptr)#0 is $34 // DUP //puts("DUP") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 elsif A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C0B4+(VX<<8) // LDY ESTKH,X - VX-- // DEX - codeptr=>2 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = estkh8+$B4+(VX<<8) // LDY ESTKH,X + VX-- // DEX + codeptr=>2 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 4 VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break //is $36 //puts("DIVMOD") @@ -425,15 +424,15 @@ def compiler(defptr)#0 j = 1 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $18 // CLC - codeptr=>1 = $69+(j<<8) // ADC #imm - codeptr=>3 = $0290 // BCC +2 - codeptr=>5 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr->0 = $18 // CLC + codeptr=>1 = $69+(j<<8) // ADC #imm + codeptr=>3 = $0290 // BCC +2 + codeptr=>5 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $3A // SUBI i++ @@ -445,151 +444,151 @@ def compiler(defptr)#0 j = 1 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $38 // SEC - codeptr=>1 = $E9+(j<<8) // SBC #imm - codeptr=>3 = $02B0 // BCS +2 - codeptr=>5 = $C0D6+(VX<<8) // DEC ESTKH,X + codeptr->0 = $38 // SEC + codeptr=>1 = $E9+(j<<8) // SBC #imm + codeptr=>3 = $02B0 // BCS +2 + codeptr=>5 = estkh8+$D6+(VX<<8) // DEC ESTKH,X codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $3C // ANDI i++ //puts("ANDI $"); putb(^(bytecode+i)) if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $29+(^(bytecode+i)<<8) // AND #imm - codeptr=>2 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = $29+(^(bytecode+i)<<8) // AND #imm + codeptr=>2 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 4 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $3E // ORI i++ //puts("ORI $"); putb(^(bytecode+i)) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - *codeptr = $09+(^(bytecode+i)<<8) // ORA #imm + *codeptr = $09+(^(bytecode+i)<<8) // ORA #imm codeptr = codeptr + 2 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $40 // ISEQ is $42 // ISNE if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if opcode == $40 //puts("ISEQ") - codeptr=>2 = $07D0 // BNE +7 - codeptr=>8 = $01D0 // BNE +1 + codeptr=>2 = $07D0 // BNE +7 + codeptr=>8 = $01D0 // BNE +1 else //puts("ISNE") - codeptr=>2 = $06D0 // BNE +6 - codeptr=>8 = $01F0 // BEQ +1 + codeptr=>2 = $06D0 // BNE +6 + codeptr=>8 = $01F0 // BEQ +1 fin - codeptr=>0 = $D0D5+$0100+(VX<<8) // CMP ESTKL+1,X - codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>6 = $C0D5+$0100+(VX<<8) // CMP ESTKH+1 - codeptr=>10 = $9888 // DEY; TYA - codeptr=>12 = $C094+$0100+(VX<<8) // STY ESTKH+1,X + codeptr=>0 = estkl8+$D5+$0100+(VX<<8) // CMP ESTKL+1,X + codeptr=>4 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>6 = estkh8+$D5+$0100+(VX<<8) // CMP ESTKH+1 + codeptr=>10 = $9888 // DEY; TYA + codeptr=>12 = estkh8+$94+$0100+(VX<<8) // STY ESTKH+1,X codeptr = codeptr + 14 - VX++ // INX + VX++ // INX VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $44 // ISGT is $4A // ISLE if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0D5+$0100+(VX<<8) // CMP ESTKL+1,X - codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $C0F5+$0100+(VX<<8) // SBC ESTKH+1 - codeptr=>6 = $0250 // BVC +2 - codeptr=>8 = $8049 // EOR #$80 + codeptr=>0 = estkl8+$D5+$0100+(VX<<8) // CMP ESTKL+1,X + codeptr=>2 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>4 = estkh8+$F5+$0100+(VX<<8) // SBC ESTKH+1 + codeptr=>6 = $0250 // BVC +2 + codeptr=>8 = $8049 // EOR #$80 if opcode == $44 //puts("ISGT") - codeptr=>10 = $0110 // BPL +1 + codeptr=>10 = $0110 // BPL +1 else //puts("ISLE") - codeptr=>10 = $0130 // BMI +1 + codeptr=>10 = $0130 // BMI +1 fin - codeptr=>12 = $9888 // DEY TYA - codeptr=>14 = $C094+$0100+(VX<<8) // STY ESTKH+1,X + codeptr=>12 = $9888 // DEY TYA + codeptr=>14 = estkh8+$94+$0100+(VX<<8) // STY ESTKH+1,X codeptr = codeptr + 16 - VX++ // INX + VX++ // INX VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $46 // ISLT is $48 // ISGE if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr=>2 = $D0D5+(VX<<8) // CMP ESTKL,X - codeptr=>4 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>6 = $C0F5+(VX<<8) // SBC ESTKH - codeptr=>8 = $0250 // BVC +2 - codeptr=>10 = $8049 // EOR #$80 + codeptr=>0 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr=>2 = estkl8+$D5+(VX<<8) // CMP ESTKL,X + codeptr=>4 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>6 = estkh8+$F5+(VX<<8) // SBC ESTKH + codeptr=>8 = $0250 // BVC +2 + codeptr=>10 = $8049 // EOR #$80 if opcode == $46 //puts("ISLT") - codeptr=>12 = $0110 // BPL +1 + codeptr=>12 = $0110 // BPL +1 else //puts("ISGE") - codeptr=>12 = $0130 // BMI +1 + codeptr=>12 = $0130 // BMI +1 fin - codeptr=>14 = $9888 // DEY; TYA - codeptr=>16 = $C094+$0100+(VX<<8) // STY ESTKH+1,X + codeptr=>14 = $9888 // DEY; TYA + codeptr=>16 = estkh8+$94+$0100+(VX<<8) // STY ESTKH+1,X codeptr = codeptr + 18 - VX++ // INX + VX++ // INX VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $4C // BRFLS is $4E // BRTRU i++ dest = i + *(bytecode+i) i++ - codeptr, VX = resolveX(codeptr, VX + 1) // INX + codeptr, VX = resolveX(codeptr, VX + 1) // INX if not A_IS_TOSL - *codeptr = $D0B5-$0100//+(VX<<8) // LDA ESTKL-1,X + *codeptr = estkl8+$B5-$0100//+(VX<<8) // LDA ESTKL-1,X codeptr = codeptr + 2 fin - codeptr=>0 = $C015-$0100//+(VX<<8) // ORA ESTKH-1,X + codeptr=>0 = estkh8+$15-$0100//+(VX<<8) // ORA ESTKH-1,X if opcode == $4C //puts("BRFLS "); puti(dest) - codeptr=>2 = $03D0 // BNE +3 + codeptr=>2 = $03D0 // BNE +3 else //puts("BRTRU "); puti(dest) - codeptr=>2 = $03F0 // BEQ +3 + codeptr=>2 = $03F0 // BEQ +3 fin - codeptr->4 = $4C // JMP abs + codeptr->4 = $4C // JMP abs codeptr=>5 = addrxlate=>[dest] if not (codeptr->6 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 5 - *jitcodeptr @@ -604,10 +603,10 @@ def compiler(defptr)#0 //puts("BRNCH "); puti(dest) codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $4C // JMP abs + codeptr->0 = $4C // JMP abs codeptr=>1 = addrxlate=>[dest] if not (codeptr->2 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 1 - *jitcodeptr @@ -626,23 +625,23 @@ def compiler(defptr)#0 ^(bytecode+case) = $FE // Flag as NOP case++ if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C0B4+(VX<<8) // LDY ESTKH,X - codeptr, VX = resolveX(codeptr + 2, VX + 1) // INX + codeptr=>0 = estkh8+$B4+(VX<<8) // LDY ESTKH,X + codeptr, VX = resolveX(codeptr + 2, VX + 1) // INX repeat dest = *(bytecode+case) //puts(" $"); puth(dest) - codeptr=>0 = $C9+(dest<<8) // CMP #imm - codeptr=>2 = $07D0 // BNE +7 - codeptr=>4 = $C0+(dest&$FF00) // CPY #imm - codeptr=>6 = $03D0 // BNE +3 + codeptr=>0 = $C9+(dest<<8) // CMP #imm + codeptr=>2 = $07D0 // BNE +7 + codeptr=>4 = $C0+(dest&$FF00) // CPY #imm + codeptr=>6 = $03D0 // BNE +3 *(bytecode+case) = $FEFE case = case + 2 dest = case + *(bytecode+case) //puts("-->"); puti(dest); putln - codeptr->8 = $4C // JMP abs + codeptr->8 = $4C // JMP abs codeptr=>9 = addrxlate=>[dest] if not (codeptr->10 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 9 - *jitcodeptr @@ -652,7 +651,7 @@ def compiler(defptr)#0 case = case + 2 j-- until not j - codeptr->0 = $4C // JMP abs + codeptr->0 = $4C // JMP abs codeptr=>1 = addrxlate=>[case] if not (codeptr->2 & $80) // Unresolved address list addrxlate=>[case] = codeptr + 1 - *jitcodeptr @@ -671,10 +670,10 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $20 // JSR abs + codeptr->0 = $20 // JSR abs codeptr=>1 = *(bytecode+i+1) codeptr = codeptr + 3 VY = UNKNOWN @@ -687,18 +686,18 @@ def compiler(defptr)#0 // Pull address off stack // if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $E785 // STA $E7:TMPL - codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $E885 // STA $E8:TMPH - codeptr, VX = resolveX(codeptr + 6, VX + 1) // INX + codeptr=>0 = tmpl8+$85 // STA $E7:TMPL + codeptr=>2 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>4 = tmph8+$85 // STA $E8:TMPH + codeptr, VX = resolveX(codeptr + 6, VX + 1) // INX // // Call through TMP // - codeptr->0 = $20 // JSR abs - codeptr=>1 = $00E6 // $E6:JMPTMP + codeptr->0 = $20 // JSR abs + codeptr=>1 = jmptmp // $E6:JMPTMP codeptr = codeptr + 3 VY = UNKNOWN A_IS_TOSL = FALSE @@ -711,12 +710,12 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $20 // JSR abs - codeptr=>1 = directentry // INTERP - codeptr=>3 = $5A + (^(bytecode+i)<<8) // LEAVE CODE AND OPERAND + codeptr->0 = $20 // JSR abs + codeptr=>1 = directentry // INTERP + codeptr=>3 = $5A + (^(bytecode+i)<<8) // LEAVE CODE AND OPERAND codeptr = codeptr + 5 A_IS_TOSL = FALSE break @@ -724,43 +723,43 @@ def compiler(defptr)#0 //puts("RET") codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $60; codeptr++ // RTS + ^codeptr = $60; codeptr++ // RTS A_IS_TOSL = FALSE break is $60 // LB //puts("LB") if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C095-$0100+(VX<<8) // STA ESTKH-1,X - codeptr=>2 = $C0A1-$0100+(VX<<8) // LDA (ESTKH-1,X) - codeptr=>4 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = estkh8+$95-$0100+(VX<<8) // STA ESTKH-1,X + codeptr=>2 = estkh8+$A1-$0100+(VX<<8) // LDA (ESTKH-1,X) + codeptr=>4 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 6 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $62 // LW //puts("LW") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C095-$0100+(VX<<8) // STA ESTKH-1,X - codeptr=>2 = $C0A1-$0100+(VX<<8) // LDA (ESTKH-1,X) - codeptr=>4 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>6 = $C0F6-$0100+(VX<<8) // INC ESTKH-1,X - codeptr=>8 = $02D0 // BNE +2 - codeptr=>10 = $C0F6+(VX<<8) // INC ESTKH,X - codeptr=>12 = $C0A1-$0100+(VX<<8) // LDA (ESTKH-1,X) - codeptr=>14 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = estkh8+$95-$0100+(VX<<8) // STA ESTKH-1,X + codeptr=>2 = estkh8+$A1-$0100+(VX<<8) // LDA (ESTKH-1,X) + codeptr=>4 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>6 = estkh8+$F6-$0100+(VX<<8) // INC ESTKH-1,X + codeptr=>8 = $02D0 // BNE +2 + codeptr=>10 = estkh8+$F6+(VX<<8) // INC ESTKH,X + codeptr=>12 = estkh8+$A1-$0100+(VX<<8) // LDA (ESTKH-1,X) + codeptr=>14 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 16 A_IS_TOSL = FALSE break @@ -769,100 +768,100 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("LLB "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 fin - *codeptr = $E0B1 // LDA (IFP),Y + *codeptr = ifpl8+$B1 // LDA (IFP),Y codeptr = codeptr + 2 if j <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 VY = 0 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $66 // LLW i++ j = ^(bytecode+i) //puts("LLW "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if VY <> j - *codeptr = $A0+((j+1)<<8) // LDY #imm + *codeptr = $A0+((j+1)<<8) // LDY #imm codeptr = codeptr + 2 VY = j else - ^codeptr = $C8; codeptr++ // INY + ^codeptr = $C8; codeptr++ // INY fin - codeptr=>0 = $E0B1 // LDA (IFP),Y - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X - codeptr->4 = $88 // DEY - codeptr=>5 = $E0B1 // LDA (IFP),Y + codeptr=>0 = ifpl8+$B1 // LDA (IFP),Y + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X + codeptr->4 = $88 // DEY + codeptr=>5 = ifpl8+$B1 // LDA (IFP),Y codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $68 // LAB is $6A // LAW dest = *(bytecode+i+1) i = i + 2 if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if opcode == $68 //puts("LAB $"); puth(dest) if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 else //puts("LAW $"); puth(dest) - codeptr->0 = $AD // LDA abs+1 + codeptr->0 = $AD // LDA abs+1 codeptr=>1 = dest+1 - codeptr=>3 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>3 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 5 fin - codeptr->0 = $AD // LDA abs + codeptr->0 = $AD // LDA abs codeptr=>1 = dest codeptr = codeptr + 3 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $6C // DLB i++ j = ^(bytecode+i) //puts("DLB "); puti(j) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 A_IS_TOSL = TOS_CLEAN fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 VY = j fin - *codeptr = $E091 // STA (IFP),Y + *codeptr = ifpl8+$91 // STA (IFP),Y codeptr = codeptr + 2 if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 break is $6E // DLW @@ -870,46 +869,46 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("DLW "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+((j+1)<<8) // LDY #imm + *codeptr = $A0+((j+1)<<8) // LDY #imm codeptr = codeptr + 2 VY = j else - ^codeptr = $C8; codeptr++ // INY + ^codeptr = $C8; codeptr++ // INY fin - codeptr=>0 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>2 = $E091 // STA (IFP),Y - codeptr->4 = $88 // DEY - codeptr=>5 = $D0B5+(VX<<8) // LDA ESTKL,X - codeptr=>7 = $E091 // STA (IFP),Y + codeptr=>0 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>2 = ifpl8+$91 // STA (IFP),Y + codeptr->4 = $88 // DEY + codeptr=>5 = estkl8+$B5+(VX<<8) // LDA ESTKL,X + codeptr=>7 = ifpl8+$91 // STA (IFP),Y codeptr = codeptr + 9 A_IS_TOSL = TOS_CLEAN break is $70 // SB is $72 // SW if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C095-$0100+(VX<<8) // STA ESTKH-1,X - codeptr=>2 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr=>4 = $C081-$0100+(VX<<8) // STA (ESTKH-1,X) + codeptr=>0 = estkh8+$95-$0100+(VX<<8) // STA ESTKH-1,X + codeptr=>2 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr=>4 = estkh8+$81-$0100+(VX<<8) // STA (ESTKH-1,X) if opcode == $70 //puts("SB") codeptr = codeptr + 6 else //puts("SW") - codeptr=>6 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>8 = $C0F6-$0100+(VX<<8) // INC ESTKH-1,X - codeptr=>10 = $02D0 // BNE +2 - codeptr=>12 = $C0F6+(VX<<8) // INC ESTKH,X - codeptr=>14 = $C081-$0100+(VX<<8) // STA (ESTKH-1,X) + codeptr=>6 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>8 = estkh8+$F6-$0100+(VX<<8) // INC ESTKH-1,X + codeptr=>10 = $02D0 // BNE +2 + codeptr=>12 = estkh8+$F6+(VX<<8) // INC ESTKH,X + codeptr=>14 = estkh8+$81-$0100+(VX<<8) // STA (ESTKH-1,X) codeptr = codeptr + 16 fin - VX = VX + 2 // INX; INX + VX = VX + 2 // INX; INX A_IS_TOSL = FALSE break is $74 // SLB @@ -917,27 +916,27 @@ def compiler(defptr)#0 i++ j = ^(bytecode+i) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 VY = j fin - codeptr=>0 = $E091 // STA (IFP),Y + codeptr=>0 = ifpl8+$91 // STA (IFP),Y if opcode == $74 //puts("SLB "); puti(j) codeptr = codeptr + 2 else //puts("SLW "); puti(j) - codeptr->2 = $C8 // INY - codeptr=>3 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>5 = $E091 // STA (IFP),Y + codeptr->2 = $C8 // INY + codeptr=>3 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>5 = ifpl8+$91 // STA (IFP),Y codeptr = codeptr + 7 VY++ fin - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $78 // SAB @@ -946,21 +945,21 @@ def compiler(defptr)#0 i = i + 2 //puts("SAW $"); puth(dest) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $8D // STA abs + codeptr->0 = $8D // STA abs codeptr=>1 = dest if opcode == $78 - //puts("SAB $"); puth(*(bytecode+i)) + //puts("SAB $"); puth(dest) codeptr = codeptr + 3 else - codeptr=>3 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->5 = $8D // STA abs+1 + codeptr=>3 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->5 = $8D // STA abs+1 codeptr=>6 = dest+1 codeptr = codeptr + 8 fin - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $7C // DAB @@ -969,25 +968,25 @@ def compiler(defptr)#0 i = i + 2 //puts("DAW $"); puth(*(bytecode+i)) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 A_IS_TOSL = TOS_CLEAN fin - codeptr->0 = $8D // STA abs + codeptr->0 = $8D // STA abs codeptr=>1 = dest if opcode == $7C - //puts("DAB $"); puth(*(bytecode+i)) + //puts("DAB $"); puth(dest) codeptr = codeptr + 3 if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 else - codeptr=>3 = $C0B4+(VX<<8) // LDY ESTKH,X - codeptr->5 = $8C // STY abs+1 + codeptr=>3 = estkh8+$B4+(VX<<8) // LDY ESTKH,X + codeptr->5 = $8C // STY abs+1 codeptr=>6 = dest+1 codeptr = codeptr + 8 VY = UNKNOWN @@ -996,48 +995,48 @@ def compiler(defptr)#0 is $80 // NOT //puts("NOT") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C015+(VX<<8) // ORA ESTKH,X - codeptr=>2 = $02F0 // BEQ +2 - codeptr=>4 = $FFA9 // LDA #$FF - codeptr=>6 = $FF49 // EOR #$FF - codeptr=>8 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = estkh8+$15+(VX<<8) // ORA ESTKH,X + codeptr=>2 = $02F0 // BEQ +2 + codeptr=>4 = $FFA9 // LDA #$FF + codeptr=>6 = $FF49 // EOR #$FF + codeptr=>8 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 10 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $82 // ADD //puts("ADD") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $18 // CLC - codeptr=>1 = $D075+$0100+(VX<<8) // ADC ESTKL+1,X - codeptr=>3 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>5 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>7 = $C075+$0100+(VX<<8) // ADC ESTKH+1,X - codeptr=>9 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr->0 = $18 // CLC + codeptr=>1 = estkl8+$75+$0100+(VX<<8) // ADC ESTKL+1,X + codeptr=>3 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>5 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>7 = estkh8+$75+$0100+(VX<<8) // ADC ESTKH+1,X + codeptr=>9 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 11 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $84 // SUB //puts("SUB") if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr->2 = $38 // SEC - codeptr=>3 = $D0F5+(VX<<8) // SBC ESTKL,X - codeptr=>5 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>7 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>9 = $C0F5+(VX<<8) // SBC ESTKH,X - codeptr=>11 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr=>0 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr->2 = $38 // SEC + codeptr=>3 = estkl8+$F5+(VX<<8) // SBC ESTKL,X + codeptr=>5 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>7 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>9 = estkh8+$F5+(VX<<8) // SBC ESTKH,X + codeptr=>11 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 13 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $86 // MUL @@ -1063,7 +1062,7 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin codeptr->0 = $20 // JSR INTERP @@ -1076,34 +1075,34 @@ def compiler(defptr)#0 is $90 // NEG //puts("NEG") if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - codeptr=>0 = $3898 // TYA -> LDA #$00; SEC - codeptr=>2 = $D0F5+(VX<<8) // SBC ESTKL,X - codeptr=>4 = $D095+(VX<<8) // STA ESTKL,X - codeptr->6 = $98 // TYA -> LDA #00 - codeptr=>7 = $C0F5+(VX<<8) // SBC ESTKH,X - codeptr=>9 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = $3898 // TYA -> LDA #$00; SEC + codeptr=>2 = estkl8+$F5+(VX<<8) // SBC ESTKL,X + codeptr=>4 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->6 = $98 // TYA -> LDA #00 + codeptr=>7 = estkh8+$F5+(VX<<8) // SBC ESTKH,X + codeptr=>9 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 11 A_IS_TOSL = FALSE break is $92 // COMP //puts("COMP") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $FF49 // EOR #$FF - codeptr=>2 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>6 = $FF49 // EOR #$FF - codeptr=>8 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = $FF49 // EOR #$FF + codeptr=>2 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>4 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>6 = $FF49 // EOR #$FF + codeptr=>8 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 10 A_IS_TOSL = FALSE break @@ -1124,36 +1123,36 @@ def compiler(defptr)#0 j = $55 wend if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = j // OP - codeptr->1 = $D0+$01+VX // ESTKL+1,X - codeptr=>2 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->6 = j // OP - codeptr->7 = $C0+$01+VX // ESTKH+1,X - codeptr=>8 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr->0 = j // OP + codeptr->1 = estkl+$01+VX // ESTKL+1,X + codeptr=>2 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>4 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->6 = j // OP + codeptr->7 = estkh+$01+VX // ESTKH+1,X + codeptr=>8 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 10 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $9E // IDXW //puts("IDXW") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $0A // ASL - codeptr=>1 = $C036+(VX<<8) // ROL ESTKH,X - codeptr->3 = $18 // CLC - codeptr=>4 = $D075+$0100+(VX<<8) // ADC ESTKL+1,X - codeptr=>6 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>8 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>10 = $C075+$0100+(VX<<8) // ADC ESTKH+1,X - codeptr=>12 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr->0 = $0A // ASL + codeptr=>1 = estkh8+$36+(VX<<8) // ROL ESTKH,X + codeptr->3 = $18 // CLC + codeptr=>4 = estkl8+$75+$0100+(VX<<8) // ADC ESTKL+1,X + codeptr=>6 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>8 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>10 = estkh8+$75+$0100+(VX<<8) // ADC ESTKH+1,X + codeptr=>12 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 14 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $A0 // BRGT - FOR/NEXT SPECIFIC TEST & BRANCH @@ -1163,23 +1162,22 @@ def compiler(defptr)#0 //puts("BRGT "); puti(dest) codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100//+(VX<<8) // LDA ESTKL+1,X - codeptr=>2 = $D0D5//+(VX<<8) // CMP ESTKL,X - codeptr=>4 = $C0B5+$0100//+(VX<<8) // LDA ESTKH+1,X - codeptr=>6 = $C0F5//+(VX<<8) // SBC ESTKH - codeptr=>8 = $0250 // BVC +2 - codeptr=>10 = $8049 // EOR #$80 - codeptr=>12 = $0510 // BPL +5 - codeptr=>14 = $E8E8 // INX; INX - codeptr->16 = $4C // JMP abs - codeptr=>17 = addrxlate=>[dest] - if not (codeptr->18 & $80) // Unresolved address list - addrxlate=>[dest] = codeptr + 17 - *jitcodeptr + codeptr=>0 = estkl8+$B5+$0100//+(VX<<8) // LDA ESTKL+1,X + codeptr=>2 = estkl8+$D5//+(VX<<8) // CMP ESTKL,X + codeptr=>4 = estkh8+$B5+$0100//+(VX<<8) // LDA ESTKH+1,X + codeptr=>6 = estkh8+$F5//+(VX<<8) // SBC ESTKH + codeptr=>8 = $0250 // BVC +2 + codeptr=>10 = $8049 // EOR #$80 + codeptr=>12 = $0310 // BPL +3 + codeptr->14 = $4C // JMP abs + codeptr=>15 = addrxlate=>[dest] + if not (codeptr->16 & $80) // Unresolved address list + addrxlate=>[dest] = codeptr + 15 - *jitcodeptr fin - codeptr = codeptr + 19 + codeptr = codeptr + 17 A_IS_TOSL = FALSE break is $A2 // BRLT - FOR/NEXT SPECIFIC TEST & BRANCH @@ -1189,25 +1187,24 @@ def compiler(defptr)#0 //puts("BRLT "); puti(dest) codeptr, VX = resolveX(codeptr, VX) if not A_IS_TOSL - *codeptr = $D0B5//+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5//+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 elsif A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0D5+$0100//+(VX<<8) // CMP ESTKL+1,X - codeptr=>2 = $C0B5//+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $C0F5+$0100//+(VX<<8) // SBC ESTKH+1 - codeptr=>6 = $0250 // BVC +2 - codeptr=>8 = $8049 // EOR #$80 - codeptr=>10 = $0510 // BPL +5 - codeptr=>12 = $E8E8 // INX; INX - codeptr->14 = $4C // JMP abs - codeptr=>15 = addrxlate=>[dest] - if not (codeptr->16 & $80) // Unresolved address list - addrxlate=>[dest] = codeptr + 15 - *jitcodeptr + codeptr=>0 = estkl8+$D5+$0100//+(VX<<8) // CMP ESTKL+1,X + codeptr=>2 = estkh8+$B5//+(VX<<8) // LDA ESTKH,X + codeptr=>4 = estkh8+$F5+$0100//+(VX<<8) // SBC ESTKH+1 + codeptr=>6 = $0250 // BVC +2 + codeptr=>8 = $8049 // EOR #$80 + codeptr=>10 = $0310 // BPL +3 + codeptr->12 = $4C // JMP abs + codeptr=>13 = addrxlate=>[dest] + if not (codeptr->14 & $80) // Unresolved address list + addrxlate=>[dest] = codeptr + 13 - *jitcodeptr fin - codeptr = codeptr + 17 + codeptr = codeptr + 15 A_IS_TOSL = FALSE break is $A4 // INCBRLE - FOR/NEXT SPECIFIC INC & TEST & BRANCH @@ -1216,7 +1213,7 @@ def compiler(defptr)#0 dest = i + *(bytecode+i) i++ if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if opcode == $A4 @@ -1224,36 +1221,36 @@ def compiler(defptr)#0 // INCR // //puts("INCBRLE "); puti(dest) - codeptr->0 = $18 // CLC - codeptr=>1 = $0169 // ADC #$01 - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>5 = $0290 // BCC +2 - codeptr=>7 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr->0 = $18 // CLC + codeptr=>1 = $0169 // ADC #$01 + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>5 = $0290 // BCC +2 + codeptr=>7 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr, VX = resolveX(codeptr + 9, VX) else // // ADD // //puts("ADDBRLE "); puti(dest) - codeptr->0 = $18 // CLC - codeptr=>1 = $D075+$0100+(VX<<8) // ADC ESTKL+1,X - codeptr=>3 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>5 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>7 = $C075+$0100+(VX<<8) // ADC ESTKH+1,X - codeptr=>9 = $C095+$0100+(VX<<8) // STA ESTKH+1,X - codeptr, VX = resolveX(codeptr + 11, VX + 1) // INX + codeptr->0 = $18 // CLC + codeptr=>1 = estkl8+$75+$0100+(VX<<8) // ADC ESTKL+1,X + codeptr=>3 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>5 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>7 = estkh8+$75+$0100+(VX<<8) // ADC ESTKH+1,X + codeptr=>9 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X + codeptr, VX = resolveX(codeptr + 11, VX + 1) // INX fin // // BRLE // - codeptr=>0 = $D0B5+$0100//+(VX<<8) // LDA ESTKL+1,X - codeptr=>2 = $D0D5//+(VX<<8) // CMP ESTKL,X - codeptr=>4 = $C0B5+$0100//+(VX<<8) // LDA ESTKH+1,X - codeptr=>6 = $C0F5//+(VX<<8) // SBC ESTKH - codeptr=>8 = $0250 // BVC +2 - codeptr=>10 = $8049 // EOR #$80 - codeptr=>12 = $0330 // BMI +3 - codeptr->14 = $4C // JMP abs + codeptr=>0 = estkl8+$B5+$0100//+(VX<<8) // LDA ESTKL+1,X + codeptr=>2 = estkl8+$D5//+(VX<<8) // CMP ESTKL,X + codeptr=>4 = estkh8+$B5+$0100//+(VX<<8) // LDA ESTKH+1,X + codeptr=>6 = estkh8+$F5//+(VX<<8) // SBC ESTKH + codeptr=>8 = $0250 // BVC +2 + codeptr=>10 = $8049 // EOR #$80 + codeptr=>12 = $0330 // BMI +3 + codeptr->14 = $4C // JMP abs codeptr=>15 = addrxlate=>[dest] if not (codeptr->16 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 15 - *jitcodeptr @@ -1268,7 +1265,7 @@ def compiler(defptr)#0 dest = i + *(bytecode+i) i++ if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if opcode == $A8 @@ -1277,14 +1274,14 @@ def compiler(defptr)#0 // //puts("DECBRGE "); puti(dest) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $38 // SEC - codeptr=>1 = $01E9 // SBC #$01 - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>5 = $02B0 // BCS +2 - codeptr=>7 = $C0D6+(VX<<8) // DEC ESTKH,X + codeptr->0 = $38 // SEC + codeptr=>1 = $01E9 // SBC #$01 + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>5 = $02B0 // BCS +2 + codeptr=>7 = estkh8+$D6+(VX<<8) // DEC ESTKH,X codeptr, VX = resolveX(codeptr + 9, VX) else // @@ -1292,30 +1289,30 @@ def compiler(defptr)#0 // //puts("SUBBRGE "); puti(dest) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr->2 = $38 // SEC - codeptr=>3 = $D0F5+(VX<<8) // SBC ESTKL,X - codeptr=>5 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>7 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>9 = $C0F5+(VX<<8) // SBC ESTKH,X - codeptr=>11 = $C095+$0100+(VX<<8) // STA ESTKH+1,X - codeptr, VX = resolveX(codeptr + 13, VX + 1) // INX - *codeptr = $D0B5//+(VX<<8) // LDA ESTKL,X + codeptr=>0 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr->2 = $38 // SEC + codeptr=>3 = estkl8+$F5+(VX<<8) // SBC ESTKL,X + codeptr=>5 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>7 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>9 = estkh8+$F5+(VX<<8) // SBC ESTKH,X + codeptr=>11 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X + codeptr, VX = resolveX(codeptr + 13, VX + 1) // INX + *codeptr = estkl8+$B5//+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin // // BRGE // - codeptr=>0 = $D0D5+$0100//+(VX<<8) // CMP ESTKL+1,X - codeptr=>2 = $C0B5//+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $C0F5+$0100//+(VX<<8) // SBC ESTKH+1,X - codeptr=>6 = $0250 // BVC +2 - codeptr=>8 = $8049 // EOR #$80 - codeptr=>10 = $0330 // BMI +3 - codeptr->12 = $4C // JMP abs + codeptr=>0 = estkl8+$D5+$0100//+(VX<<8) // CMP ESTKL+1,X + codeptr=>2 = estkh8+$B5//+(VX<<8) // LDA ESTKH,X + codeptr=>4 = estkh8+$F5+$0100//+(VX<<8) // SBC ESTKH+1,X + codeptr=>6 = $0250 // BVC +2 + codeptr=>8 = $8049 // EOR #$80 + codeptr=>10 = $0330 // BMI +3 + codeptr->12 = $4C // JMP abs codeptr=>13 = addrxlate=>[dest] if not (codeptr->14 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 13 - *jitcodeptr @@ -1331,27 +1328,27 @@ def compiler(defptr)#0 i++ codeptr, VX = resolveX(codeptr, VX) if not A_IS_TOSL - *codeptr = $D0B5//+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5//+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 elsif A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C015//+(VX<<8) // ORA ESTKH,X + codeptr=>0 = estkh8+$15//+(VX<<8) // ORA ESTKH,X if opcode == $AC //puts("BRAND "); puti(dest) - codeptr=>2 = $03D0 // BNE +3 + codeptr=>2 = $03D0 // BNE +3 else //puts("BROR "); puti(dest) - codeptr=>2 = $03F0 // BEQ +3 + codeptr=>2 = $03F0 // BEQ +3 fin - codeptr->4 = $4C // JMP abs + codeptr->4 = $4C // JMP abs codeptr=>5 = addrxlate=>[dest] if not (codeptr->6 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 5 - *jitcodeptr fin codeptr = codeptr + 7 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $B0 // ADDLB @@ -1359,29 +1356,29 @@ def compiler(defptr)#0 i++ j = ^(bytecode+i) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 VY = j fin - codeptr->0 = $18 // CLC - codeptr=>1 = $E071 // ADC (IFP),Y + codeptr->0 = $18 // CLC + codeptr=>1 = ifpl8+$71 // ADC (IFP),Y if opcode == $B0 //puts("ADDLB "); puti(j) - codeptr=>3 = $0290 // BCC +2 - codeptr=>5 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr=>3 = $0290 // BCC +2 + codeptr=>5 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X else //puts("ADDLW "); puti(j) - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>5 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->7 = $C8 // INY - codeptr=>8 = $E071 // ADC (IFP),Y - codeptr=>10 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>5 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->7 = $C8 // INY + codeptr=>8 = ifpl8+$71 // ADC (IFP),Y + codeptr=>10 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 12 VY++ A_IS_TOSL = FALSE @@ -1392,24 +1389,24 @@ def compiler(defptr)#0 dest = *(bytecode+i+1) i = i + 2 if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $6D18 // CLC; ADC abs + codeptr=>0 = $6D18 // CLC; ADC abs codeptr=>2 = dest if opcode == $B4 //puts("ADDAB $"); puth(dest) - codeptr=>4 = $0290 // BCC +2 - codeptr=>6 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr=>4 = $0290 // BCC +2 + codeptr=>6 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr = codeptr + 8 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X else //puts("ADDAW $"); puth(dest) - codeptr=>4 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>6 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->8 = $6D // ADC abs + codeptr=>4 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>6 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->8 = $6D // ADC abs codeptr=>9 = dest+1 - codeptr=>11 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>11 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 13 A_IS_TOSL = FALSE fin @@ -1419,27 +1416,27 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("IDXLB "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 fin - *codeptr = $E0B1 // LDA (IFP),Y + *codeptr = ifpl8+$B1 // LDA (IFP),Y codeptr = codeptr + 2 if j <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - codeptr->0 = $0A // ASL - codeptr=>1 = $0290 // BCC +2 - codeptr=>3 = $18C8 // INY; CLC - codeptr=>5 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>7 = $D095+(VX<<8) // STA ESTKL,X - codeptr->9 = $98 // TYA - codeptr=>10 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>12 = $C095+(VX<<8) // STA ESTKH,X + codeptr->0 = $0A // ASL + codeptr=>1 = $0290 // BCC +2 + codeptr=>3 = $18C8 // INY; CLC + codeptr=>5 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>7 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->9 = $98 // TYA + codeptr=>10 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>12 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 14 VY = UNKNOWN A_IS_TOSL = FALSE @@ -1449,26 +1446,26 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("IDXLW "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 fin - codeptr=>0 = $E0B1 // LDA (IFP),Y - codeptr->2 = $0A // ASL - codeptr=>3 = $E785 // STA $E7:TMPL - codeptr->5 = $C8 // INY - codeptr=>6 = $E0B1 // LDA (IFP),Y - codeptr=>8 = $A82A // ROL; TAY - codeptr=>10 = $E7A5 // LDA $E7:TMPL - codeptr->12 = $18 // CLC - codeptr=>13 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>15 = $D095+(VX<<8) // STA ESTKL,X - codeptr->17 = $98 // TYA - codeptr=>18 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>20 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = ifpl8+$B1 // LDA (IFP),Y + codeptr->2 = $0A // ASL + codeptr=>3 = tmpl8+$85 // STA $E7:TMPL + codeptr->5 = $C8 // INY + codeptr=>6 = ifpl8+$B1 // LDA (IFP),Y + codeptr=>8 = $A82A // ROL; TAY + codeptr=>10 = tmpl8+$A5 // LDA $E7:TMPL + codeptr->12 = $18 // CLC + codeptr=>13 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>15 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->17 = $98 // TYA + codeptr=>18 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>20 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 22 VY = UNKNOWN A_IS_TOSL = FALSE @@ -1478,23 +1475,23 @@ def compiler(defptr)#0 i = i + 2 //puts("IDXAB $"); puth(*(bytecode+i)) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - codeptr->0 = $AD // LDA abs + codeptr->0 = $AD // LDA abs codeptr=>1 = dest - codeptr->3 = $0A // ASL - codeptr=>4 = $0290 // BCC +2 - codeptr=>6 = $18C8 // INY; CLC - codeptr=>8 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>10 = $D095+(VX<<8) // STA ESTKL,X - codeptr->12 = $98 // TYA - codeptr=>13 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>15 = $C095+(VX<<8) // STA ESTKH,X + codeptr->3 = $0A // ASL + codeptr=>4 = $0290 // BCC +2 + codeptr=>6 = $18C8 // INY; CLC + codeptr=>8 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>10 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->12 = $98 // TYA + codeptr=>13 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>15 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 17 VY = UNKNOWN A_IS_TOSL = FALSE @@ -1504,23 +1501,23 @@ def compiler(defptr)#0 i = i + 2 //puts("IDXAW $"); puth(dest) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $AD // LDA abs + codeptr->0 = $AD // LDA abs codeptr=>1 = dest - codeptr->3 = $0A // ASL - codeptr=>4 = $E785 // STA $E7:TMPL - codeptr->6 = $AD // LDA abs+1 + codeptr->3 = $0A // ASL + codeptr=>4 = tmpl8+$85 // STA $E7:TMPL + codeptr->6 = $AD // LDA abs+1 codeptr=>7 = dest+1 - codeptr=>9 = $A82A // ROL; TAY - codeptr=>11 = $E7A5 // LDA $E7:TMPL - codeptr->13 = $18 // CLC - codeptr=>14 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>16 = $D095+(VX<<8) // STA ESTKL,X - codeptr->18 = $98 // TYA - codeptr=>19 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>21 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>9 = $A82A // ROL; TAY + codeptr=>11 = tmpl8+$A5 // LDA $E7:TMPL + codeptr->13 = $18 // CLC + codeptr=>14 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>16 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->18 = $98 // TYA + codeptr=>19 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>21 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 23 VY = UNKNOWN A_IS_TOSL = FALSE diff --git a/src/vmsrc/apple/soscmd.pla b/src/vmsrc/apple/soscmd.pla index f370a2b..6150543 100755 --- a/src/vmsrc/apple/soscmd.pla +++ b/src/vmsrc/apple/soscmd.pla @@ -23,6 +23,15 @@ const jitcodeptr = $A0F4 const sinterp = $A0F6 const xinterp = $A0F8 const jitinterp = $A0FA +const estkh8 = $C000 +const estkh = $00C0 +const estkl8 = $D000 +const estkl = $00D0 +const ifpl8 = $E000 +const ifph8 = $E100 +const jmptmp = $00E6 +const tmpl8 = $E700 +const tmph8 = $E800 word directentry, indirectentry // // COPY FROM EXT MEM TO MAIN MEM. From 67829d96cd60bb57dddd009e8fe921d909f529be Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 26 May 2018 08:31:05 -0700 Subject: [PATCH 05/24] Make sure prefix is set for AUTORUN --- PLASMA-SYS2.PO | Bin 143360 -> 143360 bytes src/vmsrc/apple/cmd.pla | 2 +- src/vmsrc/apple/cmdjit.pla | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/PLASMA-SYS2.PO b/PLASMA-SYS2.PO index 2a61cbb98dfaa62fa53fa3a663ce0b12ac5ce079..ff29a2a0457ce417a6bc45a35766b15062f4f13c 100755 GIT binary patch delta 64 zcmZp8z|ru4V}k>WfTaLKuZo0_GQ(pAfn6$69FqfBp0R)!o2^(sN^z<^7SK8#A}MOH SSzqA{W0O*w65}!@CO!ag*AkWh delta 64 zcmZp8z|ru4V}k>WfQbM@uZo0_GQ(pAfrTm(?2`jnp0R)!o2^(sN^vq&2n&S7$uY!i SW@I|U*re2^#JEg}i4OozL=hMO diff --git a/src/vmsrc/apple/cmd.pla b/src/vmsrc/apple/cmd.pla index b445618..8f56fac 100755 --- a/src/vmsrc/apple/cmd.pla +++ b/src/vmsrc/apple/cmd.pla @@ -1414,6 +1414,6 @@ else // prstr("MEM FREE:$"); prword(availheap); crout fin -perr = 0 +pfxop(@prefix, GET_PFX) docmds done diff --git a/src/vmsrc/apple/cmdjit.pla b/src/vmsrc/apple/cmdjit.pla index ced5103..6568fb4 100755 --- a/src/vmsrc/apple/cmdjit.pla +++ b/src/vmsrc/apple/cmdjit.pla @@ -1485,6 +1485,6 @@ else // prstr("MEM FREE:$"); prword(availheap); crout fin -perr = 0 +pfxop(@prefix, GET_PFX) docmds done From 6f8d5810d5e2f550fc610640cf55263a8dd5f376 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 26 May 2018 17:42:06 -0700 Subject: [PATCH 06/24] Forgot to bring in fix for ProDOS clock from 1.x --- PLASMA-SYS2.PO | Bin 143360 -> 143360 bytes src/vmsrc/apple/cmd.pla | 2 +- src/vmsrc/apple/cmdjit.pla | 4 ++-- src/vmsrc/apple/plvm02.s | 2 +- src/vmsrc/apple/plvm802.s | 4 ++-- src/vmsrc/apple/plvmjit02.s | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/PLASMA-SYS2.PO b/PLASMA-SYS2.PO index ff29a2a0457ce417a6bc45a35766b15062f4f13c..9d3049a501f1bcc2a7eeb1424509c0c09040f9b3 100755 GIT binary patch delta 564 zcmZp8z|ru4V}mOTHy@8O!(#@4T`J}RlLJ_!Oy+kp2!KQwKq5>G8Ua3GzIuj677P&Z zUy^}~;l2PvuZjRzBUstwc`R8*5QCuFl%0KDpgO=5+eHRWhL3y!569e<+8}emL<_yd$^=~pTe_%N=6UcN1lfGcm1w{5RFzYlQ0HU1?%rg&O z>=5|w!y~}Rz&v@PlE~!wN^C&<7HHPwKIH@s24;(w%)LN^zbQ*Gfh-VG+r#Baz=D;A zV9Siaqy>hR7m%z}G!&bxZ^*IP)bJ(9_{j<;B8(pA(V(otp$W8x-FD-ML+0=7;IoQy7y~ zK!E^qiVuUryD!WOxOeV>DCrRRs=)I%=g)s;2IlRbrZCQt20C>5gbj?rd}@ycw2p^} ViW-Di$uh)jW@O@LT(*g^4gjFduO|Qi delta 364 zcmZp8z|ru4V}mOTw}g-~!(#@4T`E!>lLJ_!O!QS`_&_2I3sof8nHV$ze8PP742>)p zAmG0w0~f=60ft@`h(@ro$@5sUjF9+D49d>FE>Im{itQo;C&L>)22&L#Ubuamtyt3~ z86Rw3Bxl0N)WEd)hI|>5c>~i*{hJL;A6QPz1Tvk$q%W9s0g*ioOgha6fM{m})69bx zI|RP_@CYzAFioDQBrl<=xHZ^?71k$WvBEtA!vZ+ZR*a$YD5tI8&q(CN!HSaUozR!fw wEe2%DpKX&ELzuRQ{9#R3PtRYsi3^AJ-nM4?uZDOng0QMel9smFU diff --git a/src/vmsrc/apple/cmd.pla b/src/vmsrc/apple/cmd.pla index 8f56fac..28125ba 100755 --- a/src/vmsrc/apple/cmd.pla +++ b/src/vmsrc/apple/cmd.pla @@ -1398,7 +1398,7 @@ loop // // Set system path // -strcat(strcpy(@sysmods, $280), "SYS/")) // This is the path to CMD +strcat(strcpy(@sysmods, $300), "SYS/")) // This is the path to CMD syspath = @sysmods // Update external interface table syscmdln = @cmdln // diff --git a/src/vmsrc/apple/cmdjit.pla b/src/vmsrc/apple/cmdjit.pla index 6568fb4..1c347f2 100755 --- a/src/vmsrc/apple/cmdjit.pla +++ b/src/vmsrc/apple/cmdjit.pla @@ -41,7 +41,7 @@ end // const jitcomp = $03E2 const jitcodeptr = $03E4 -const jitmod = $02E0 +const jitmod = $02F0 // // Pedefined functions. // @@ -1469,7 +1469,7 @@ loop // // Set system path // -strcat(strcpy(@sysmods, $280), "SYS/")) // This is the path to CMD +strcat(strcpy(@sysmods, $300), "SYS/")) // This is the path to CMD syspath = @sysmods // Update external interface table syscmdln = @cmdln // diff --git a/src/vmsrc/apple/plvm02.s b/src/vmsrc/apple/plvm02.s index 6df5f81..b612b8e 100755 --- a/src/vmsrc/apple/plvm02.s +++ b/src/vmsrc/apple/plvm02.s @@ -38,7 +38,7 @@ IPL = IP IPH = IPL+1 OPIDX = FETCHOP+6 OPPAGE = OPIDX+1 -STRBUF = $0280 +STRBUF = $0300 INTERP = $03D0 ;****************************** ;* * diff --git a/src/vmsrc/apple/plvm802.s b/src/vmsrc/apple/plvm802.s index 3fa5ee2..7c06a2a 100644 --- a/src/vmsrc/apple/plvm802.s +++ b/src/vmsrc/apple/plvm802.s @@ -63,8 +63,8 @@ OPPAGE = OPIDX+1 ; ; BUFFER ADDRESSES ; -STRBUF = $0280 -JITMOD = $02E0 +STRBUF = $0300 +JITMOD = $02F0 INTERP = $03D0 JITCOMP = $03E2 JITCODE = $03E4 diff --git a/src/vmsrc/apple/plvmjit02.s b/src/vmsrc/apple/plvmjit02.s index 9c05eab..6f107e0 100755 --- a/src/vmsrc/apple/plvmjit02.s +++ b/src/vmsrc/apple/plvmjit02.s @@ -50,8 +50,8 @@ IPL = IP IPH = IPL+1 OPIDX = FETCHOP+6 OPPAGE = OPIDX+1 -STRBUF = $0280 -JITMOD = $02E0 +STRBUF = $0300 +JITMOD = $02F0 INTERP = $03D0 JITCOMP = $03E2 JITCODE = $03E4 From 22f22a382b342c220ab0c9c768b98edab36ca238 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 27 May 2018 08:13:26 -0700 Subject: [PATCH 07/24] Fix comments for FETCHOP --- src/vmsrc/apple/plvm01.s | 2 +- src/vmsrc/apple/plvm02.s | 2 +- src/vmsrc/apple/plvm03.s | 2 +- src/vmsrc/apple/plvmjit02.s | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vmsrc/apple/plvm01.s b/src/vmsrc/apple/plvm01.s index 3f9b738..c7e70ec 100644 --- a/src/vmsrc/apple/plvm01.s +++ b/src/vmsrc/apple/plvm01.s @@ -1095,7 +1095,7 @@ PAGE0 = * ;* INX ; DROP INY ; NEXTOP - LDA $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 + LDA $FFFF,Y ; FETCHOP @ $F1, IP MAPS OVER $FFFF @ $F2 STA OPIDX JMP (OPTBL) } diff --git a/src/vmsrc/apple/plvm02.s b/src/vmsrc/apple/plvm02.s index b612b8e..9781c0f 100755 --- a/src/vmsrc/apple/plvm02.s +++ b/src/vmsrc/apple/plvm02.s @@ -285,7 +285,7 @@ PAGE0 = * !PSEUDOPC DROP { INX ; DROP @ $EF INY ; NEXTOP @ $F0 - LDA $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 + LDA $FFFF,Y ; FETCHOP @ $F1, IP MAPS OVER $FFFF @ $F2 STA OPIDX JMP (OPTBL) ; OPIDX AND OPPAGE MAP OVER OPTBL } diff --git a/src/vmsrc/apple/plvm03.s b/src/vmsrc/apple/plvm03.s index d6f30ad..63f782d 100755 --- a/src/vmsrc/apple/plvm03.s +++ b/src/vmsrc/apple/plvm03.s @@ -126,7 +126,7 @@ PAGE0 = * ;* INX ; DROP INY ; NEXTOP - LDA $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 + LDA $FFFF,Y ; FETCHOP @ $F1, IP MAPS OVER $FFFF @ $F2 STA OPIDX JMP (OPTBL) } diff --git a/src/vmsrc/apple/plvmjit02.s b/src/vmsrc/apple/plvmjit02.s index 6f107e0..54c2820 100755 --- a/src/vmsrc/apple/plvmjit02.s +++ b/src/vmsrc/apple/plvmjit02.s @@ -371,7 +371,7 @@ PAGE0 = * !PSEUDOPC DROP { INX ; DROP @ $EF INY ; NEXTOP @ $F0 - LDA $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 + LDA $FFFF,Y ; FETCHOP @ $F1, IP MAPS OVER $FFFF @ $F2 STA OPIDX JMP (OPTBL) ; OPIDX AND OPPAGE MAP OVER OPTBL } From 72533c9ad9b893a3f27f99982b04079be90249b9 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 27 May 2018 20:12:26 -0700 Subject: [PATCH 08/24] Refix ProDOS clock input buffer --- PLASMA-SYS2.PO | Bin 143360 -> 143360 bytes src/vmsrc/apple/cmd.pla | 3 ++- src/vmsrc/apple/cmdjit.pla | 3 ++- src/vmsrc/apple/cmdjitstub.s | 14 ++++++++------ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/PLASMA-SYS2.PO b/PLASMA-SYS2.PO index 9d3049a501f1bcc2a7eeb1424509c0c09040f9b3..d81c825766d6208a6452698938837222e881eaec 100755 GIT binary patch delta 223 zcmZp8z|ru4V}k>WfV%)guL>WJGQ(pAf!!)xB9jAHyjZ}Dc`Q8wzxfzkRD=ZJvYV|~ zk8!a2up9UUZFc0_&p7?fLPpW)oIFhGiv*aa8}KldFWxM~!=>||QB6!Bq+Z-$@@Bak zjDC}Qgi^&3f`kNVWfTaLKuL>WJGQ(pAfn6%*0+Rz+yjZ}Dc`Q8wANd$uRD=ZJvYV|~ zk8udBv~OiwsnE*4fT4wBkw6>gWC;a*CLfQ@tbF?!7YQ)&v~q5_@PXyqfdvd(4@~1> zTE4hkh-Y%6+zm#T$x-qp+&T_CMDBEGIN STA SRCH @@ -19,6 +25,7 @@ JITCODE = $03E4 STY DSTL LDX #$10 STX DSTH + INX - LDA (SRC),Y STA (DST),Y INY @@ -44,8 +51,3 @@ JITCODE = $03E4 TXS LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX JMP $1000 -_CMDBEGIN = * -!PSEUDOPC $1000 { -!SOURCE "vmsrc/apple/cmdjit.a" -_CMDEND = * -} From 4039c6a3ad3a8b0b0c774609386df5cf5bf9102f Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 28 May 2018 11:44:18 -0700 Subject: [PATCH 09/24] Set theme jekyll-theme-hacker --- _config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 _config.yml diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..fc24e7a --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-hacker \ No newline at end of file From 0185e4e5f56004ef82b931e8709f4f6650eade70 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 3 Jul 2018 12:03:22 -0700 Subject: [PATCH 10/24] Add new benchmark --- src/makefile | 7 ++++++- src/mkrel | 1 + src/samplesrc/primegap.pla | 41 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/samplesrc/primegap.pla diff --git a/src/makefile b/src/makefile index dac88e8..bf3c631 100755 --- a/src/makefile +++ b/src/makefile @@ -19,6 +19,7 @@ JITUNE = rel/apple/JITUNE\#FE1000 SOS = rel/apple/SOS\#FE1000 ROD = rel/ROD\#FE1000 SIEVE = rel/SIEVE\#FE1000 +PRIMEGAP = rel/PRIMEGAP\#FE1000 ARGS = rel/ARGS\#FE1000 SPIPORT = rel/apple/SPIPORT\#FE1000 SDFAT = rel/apple/SDFAT\#FE1000 @@ -85,7 +86,7 @@ TXTTYPE = .TXT #SYSTYPE = \#FF2000 #TXTTYPE = \#040000 -apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(DGR) $(DGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) +apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(DGR) $(DGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) -rm vmsrc/plvmzp.inc c64: $(PLVMZP_C64) $(PLASM) $(PLVM) $(PLVMC64) @@ -243,6 +244,10 @@ $(SIEVE): samplesrc/sieve.pla $(PLVM02) $(PLASM) ./$(PLASM) -AMW < samplesrc/sieve.pla > samplesrc/sieve.a acme --setpc 4094 -o $(SIEVE) samplesrc/sieve.a +$(PRIMEGAP): samplesrc/primegap.pla $(PLVM02) $(PLASM) + ./$(PLASM) -AMW < samplesrc/primegap.pla > samplesrc/primegap.a + acme --setpc 4094 -o $(PRIMEGAP) samplesrc/primegap.a + $(SANE): libsrc/sane.pla $(PLVM02) $(PLASM) ./$(PLASM) -AMOW < libsrc/sane.pla > libsrc/sane.a acme --setpc 4094 -o $(SANE) libsrc/sane.a diff --git a/src/mkrel b/src/mkrel index 035eae5..e1ad102 100755 --- a/src/mkrel +++ b/src/mkrel @@ -56,6 +56,7 @@ cp rel/apple/DGRTEST#FE1000 prodos/demos/DGRTEST.REL cp rel/RPNCALC#FE1000 prodos/demos/RPNCALC.REL cp rel/LZ4CAT#FE1000 prodos/demos/LZ4CAT.REL cp rel/ROD#FE1000 prodos/demos/ROD.REL +cp rel/PRIMEGAP#FE1000 prodos/demos/PRIMEGAP.REL mkdir prodos/demos/rogue cp rel/ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL diff --git a/src/samplesrc/primegap.pla b/src/samplesrc/primegap.pla new file mode 100644 index 0000000..45f0755 --- /dev/null +++ b/src/samplesrc/primegap.pla @@ -0,0 +1,41 @@ +include "inc/cmdsys.plh" + +var a, b, i,loprim,hiprim + +def getnum + var str, num + num = 0 + str = gets(':'|$80) + 1 + while ^str >= '0' and ^str <= '9' + num = num * 10 + (^str - '0') + str++ + loop + return num +end + +def prim(x) + var i + i = 3 + while i*i < x and x % i; i = i + 2; loop + return x < i*i +end + +puts("Geben Sie den oberen Grenzwert ein") +a = getnum +puts("Geben Sie die minimale Differenz ein") +b = getnum +loprim, hiprim, i = 1, 1, 3 +while i <= a and hiprim-loprim < b + if prim(i) + loprim = hiprim + hiprim = i + fin + i = i + 2 +loop +if hiprim-loprim < b + puts("keine Loesung gefunden !") +else + puti(hiprim); putc(' '); puti(loprim); putc(' '); puti(hiprim-loprim) +fin +putln +done From 5ca23ee8988640acc4d40e7a3c73506bf5683458 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 13 Jul 2018 09:49:22 -0700 Subject: [PATCH 11/24] Add 800K disk image of PLASMA install --- PLASMA.2mg | Bin 0 -> 819264 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 PLASMA.2mg diff --git a/PLASMA.2mg b/PLASMA.2mg new file mode 100644 index 0000000000000000000000000000000000000000..00e1bf2c40ae03c022de7cd7adfdc616a17268b3 GIT binary patch literal 819264 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�%d7QWhNF5; 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≦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 z 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 z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U VP=Epypa2CZKmiI+;Gam~e*? Date: Sat, 14 Jul 2018 08:57:00 -0700 Subject: [PATCH 12/24] Clean up directory structure --- _config.yml | 1 - PLASMA-BLD2.PO => images/apple/PLASMA-BLD2.PO | Bin PLASMA-DEM2.PO => images/apple/PLASMA-DEM2.PO | Bin PLASMA-FPSOS.PO => images/apple/PLASMA-FPSOS.PO | Bin PLASMA-SYS2.PO => images/apple/PLASMA-SYS2.PO | Bin PLASMA.2mg => images/apple/PLASMA.2mg | Bin PLASMA.D64 => images/c64/PLASMA.D64 | Bin 7 files changed, 1 deletion(-) delete mode 100644 _config.yml rename PLASMA-BLD2.PO => images/apple/PLASMA-BLD2.PO (100%) rename PLASMA-DEM2.PO => images/apple/PLASMA-DEM2.PO (100%) rename PLASMA-FPSOS.PO => images/apple/PLASMA-FPSOS.PO (100%) rename PLASMA-SYS2.PO => images/apple/PLASMA-SYS2.PO (100%) rename PLASMA.2mg => images/apple/PLASMA.2mg (100%) rename PLASMA.D64 => images/c64/PLASMA.D64 (100%) diff --git a/_config.yml b/_config.yml deleted file mode 100644 index fc24e7a..0000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-hacker \ No newline at end of file diff --git a/PLASMA-BLD2.PO b/images/apple/PLASMA-BLD2.PO similarity index 100% rename from PLASMA-BLD2.PO rename to images/apple/PLASMA-BLD2.PO diff --git a/PLASMA-DEM2.PO b/images/apple/PLASMA-DEM2.PO similarity index 100% rename from PLASMA-DEM2.PO rename to images/apple/PLASMA-DEM2.PO diff --git a/PLASMA-FPSOS.PO b/images/apple/PLASMA-FPSOS.PO similarity index 100% rename from PLASMA-FPSOS.PO rename to images/apple/PLASMA-FPSOS.PO diff --git a/PLASMA-SYS2.PO b/images/apple/PLASMA-SYS2.PO similarity index 100% rename from PLASMA-SYS2.PO rename to images/apple/PLASMA-SYS2.PO diff --git a/PLASMA.2mg b/images/apple/PLASMA.2mg similarity index 100% rename from PLASMA.2mg rename to images/apple/PLASMA.2mg diff --git a/PLASMA.D64 b/images/c64/PLASMA.D64 similarity index 100% rename from PLASMA.D64 rename to images/c64/PLASMA.D64 From 1527eaac247df3140716d0238314a1f36ae84589 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 21 Jul 2018 15:56:49 -0700 Subject: [PATCH 13/24] increse DHCP timeout and add consts for 16 bit JIT ZP values --- src/libsrc/apple/jit16.pla | 4 ++ src/libsrc/dhcp.pla | 2 +- src/libsrc/jit16core.pla | 92 +++++++++++++++++++------------------- 3 files changed, 51 insertions(+), 47 deletions(-) diff --git a/src/libsrc/apple/jit16.pla b/src/libsrc/apple/jit16.pla index 837abfb..7587952 100644 --- a/src/libsrc/apple/jit16.pla +++ b/src/libsrc/apple/jit16.pla @@ -22,11 +22,15 @@ const estkh8 = $C000 const estkh = $00C0 const estkl8 = $D000 const estkl = $00D0 +const ifp16 = $E000 const ifpl8 = $E000 const ifph8 = $E100 const jmptmp = $00E6 +const tmp16 = $E700 const tmpl8 = $E700 const tmph8 = $E800 +const fetchop = $00F1 +const ip16 = $00F2 // // Bytecode interpreter entrypoints // diff --git a/src/libsrc/dhcp.pla b/src/libsrc/dhcp.pla index d982800..1fd8311 100644 --- a/src/libsrc/dhcp.pla +++ b/src/libsrc/dhcp.pla @@ -213,7 +213,7 @@ repeat fin next retry++ -until retry > 4 or optsOP.2 == DHCP_ACK +until retry > 16 or optsOP.2 == DHCP_ACK iNet:closeUDP(portDHCP) iNet:setInterfaceIP(@localip, @localnet, @localgw) puts("Apple II bound to:\n");putip(@localip);putc('/');putip(@localnet);putln diff --git a/src/libsrc/jit16core.pla b/src/libsrc/jit16core.pla index e9b4792..ade881b 100644 --- a/src/libsrc/jit16core.pla +++ b/src/libsrc/jit16core.pla @@ -276,7 +276,7 @@ def compiler(defptr)#0 ^codeptr = $48; codeptr++ // PHA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -450,9 +450,9 @@ def compiler(defptr)#0 fin codeptr->0 = $A0 // LDY #$0000 codeptr=>1 = $0000 - codeptr=>3 = $E785 // STA TMP + codeptr=>3 = tmp16+$85 // STA TMP codeptr=>5 = $3868 // PLA; SEC - codeptr=>7 = $E7E5 // SBC TMP + codeptr=>7 = tmp16+$E5 // SBC TMP codeptr=>9 = $0350 // BVC +3 codeptr->11 = $49 // EOR #$8000 codeptr=>12 = $8000 @@ -565,7 +565,7 @@ def compiler(defptr)#0 codeptr=>5 = $F285 // STA IP codeptr=>7 = $00A0 // LDY #$00 codeptr->9 = $4C // JMP FETCHOP - codeptr=>10 = $00F1 // FETCHOP + codeptr=>10 = fetchop // FETCHOP codeptr->12 = opcode // OP when opcode is $54 // CALL @@ -611,9 +611,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr=>4 = $E7B2 // LDA (TMP) + codeptr=>4 = tmp16+$B2 // LDA (TMP) codeptr=>6 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM codeptr->8 = $29 // AND #$00FF codeptr=>9 = $00FF @@ -625,8 +625,8 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E785 // STA TMP - codeptr=>2 = $E7B2 // LDA (TMP) + codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>2 = tmp16+$B2 // LDA (TMP) codeptr = codeptr + 4 A_IS_TOS = TRUE // PHA break @@ -638,7 +638,7 @@ def compiler(defptr)#0 ^codeptr = $48; codeptr++ // PHA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -656,7 +656,7 @@ def compiler(defptr)#0 ^codeptr = $48; codeptr++ // PHA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -675,21 +675,21 @@ def compiler(defptr)#0 // // Ensure we only do byte sized accesses to H/W // - codeptr=>0 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr->2 = $AD // LDA abs + codeptr=>0 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM + codeptr->2 = $AD // LDA abs codeptr=>3 = dest - codeptr=>5 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM - codeptr->7 = $29 // AND #$00FF + codeptr=>5 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM + codeptr->7 = $29 // AND #$00FF codeptr=>8 = $00FF codeptr = codeptr + 10 else - codeptr->0 = $AD // LDA abs + codeptr->0 = $AD // LDA abs codeptr=>1 = dest - codeptr->3 = $29 // AND #$00FF + codeptr->3 = $29 // AND #$00FF codeptr=>4 = $00FF codeptr = codeptr + 6 fin - A_IS_TOS = TRUE // PHA + A_IS_TOS = TRUE // PHA break is $6A // LAW dest = *(bytecode+i+1) @@ -711,7 +711,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -738,7 +738,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -757,10 +757,10 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr->2 = $68 // PLA codeptr=>3 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr=>5 = $E792 // STA (TMP) + codeptr=>5 = tmp16+$92 // STA (TMP) codeptr=>7 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM codeptr = codeptr + 9 A_IS_TOS = FALSE @@ -770,9 +770,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr->2 = $68 // PLA - codeptr=>3 = $E792 // STA (TMP) + codeptr=>3 = tmp16+$92 // STA (TMP) codeptr = codeptr + 5 A_IS_TOS = FALSE break @@ -848,9 +848,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr=>2 = $3868 // PLA; SEC - codeptr=>4 = $E7E5 // SBC TMP + codeptr=>4 = tmp16+$E5 // SBC TMP codeptr = codeptr + 6 A_IS_TOS = TRUE break @@ -881,10 +881,10 @@ def compiler(defptr)#0 codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y codeptr->2 = $A9 // LDA #imm codeptr=>3 = codeptr + 12 - codeptr=>5 = $F285 // STA IP + codeptr=>5 = ip16+$85 // STA IP codeptr=>7 = $00A0 // LDY #$00 codeptr->9 = $4C // JMP FETCHOP - codeptr=>10 = $00F1 // FETCHOP + codeptr=>10 = fetchop // FETCHOP codeptr=>12 = $C000+opcode // OPCODE; NATV CODE codeptr = codeptr + 14 X_IS_IFP = FALSE @@ -1076,10 +1076,10 @@ def compiler(defptr)#0 // SUB // //puts("SUBBRGE "); puti(dest) - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr=>2 = $A3+(TOS<<8) // LDA S,TOS codeptr->4 = $68 // SEC - codeptr=>5 = $E7E5 // SBC TMP + codeptr=>5 = tmp16+$E5 // SBC TMP codeptr=>7 = $83+(TOS<<8) // STA S,TOS codeptr = codeptr + 9 fin @@ -1133,16 +1133,16 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr=>2 = $B5+(j<<8) // LDA dp,X codeptr->4 = $29 // AND #$00FF codeptr=>5 = $00FF codeptr->7 = $18 // CLC - codeptr=>8 = $E765 // ADC TMP + codeptr=>8 = tmp16+$65 // ADC TMP codeptr = codeptr + 10 A_IS_TOS = TRUE // PHA break @@ -1154,7 +1154,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -1174,7 +1174,7 @@ def compiler(defptr)#0 // // Ensure only byte sized accesses to H/W addresses // - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM codeptr->4 = $AD // LDA abs codeptr=>5 = dest @@ -1182,16 +1182,16 @@ def compiler(defptr)#0 codeptr->9 = $29 // AND #$00FF codeptr=>10 = $00FF codeptr->12 = $18 // CLC - codeptr=>13 = $E765 // ADC TMP + codeptr=>13 = tmp16+$65 // ADC TMP codeptr = codeptr + 15 else - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr->2 = $AD // LDA abs codeptr=>3 = dest codeptr->5 = $29 // AND #$00FF codeptr=>6 = $00FF codeptr->8 = $18 // CLC - codeptr=>9 = $E765 // ADC TMP + codeptr=>9 = tmp16+$65 // ADC TMP codeptr = codeptr + 11 fin A_IS_TOS = TRUE // PHA @@ -1215,16 +1215,16 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr=>2 = $B5+(j<<8) // LDA dp,X codeptr->4 = $29 // AND #$00FF codeptr=>5 = $00FF codeptr->7 = $0A // ASL - codeptr=>8 = $E765 // ADC TMP + codeptr=>8 = tmp16+$65 // ADC TMP codeptr = codeptr + 10 A_IS_TOS = TRUE // PHA break @@ -1236,7 +1236,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = $E0A6 // LDX IFP + *codeptr = ifp16+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -1258,7 +1258,7 @@ def compiler(defptr)#0 // // Ensure only byte sized accesses to H/W addresses // - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM codeptr->4 = $AD // LDA abs codeptr=>5 = dest @@ -1266,16 +1266,16 @@ def compiler(defptr)#0 codeptr->9 = $29 // AND #$00FF codeptr=>10 = $00FF codeptr->12 = $0A // ASL - codeptr=>13 = $E765 // ADC TMP + codeptr=>13 = tmp16+$65 // ADC TMP codeptr = codeptr + 15 else - codeptr=>0 = $E785 // STA TMP + codeptr=>0 = tmp16+$85 // STA TMP codeptr->2 = $AD // LDA abs codeptr=>3 = dest codeptr->5 = $29 // AND #$00FF codeptr=>6 = $00FF codeptr->8 = $0A // ASL - codeptr=>9 = $E765 // ADC TMP + codeptr=>9 = tmp16+$65 // ADC TMP codeptr = codeptr + 11 fin A_IS_TOS = TRUE // PHA @@ -1292,7 +1292,7 @@ def compiler(defptr)#0 codeptr=>4 = $6D18 // CLC; ADC abs codeptr=>6 = dest codeptr = codeptr + 8 - A_IS_TOS = TRUE // PHA + A_IS_TOS = TRUE // PHA break is $FE // NOPed out earlier by SELect break From c789c3249ecd2f9c2a5cecf41f083a917cc70d49 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 21 Jul 2018 18:55:25 -0700 Subject: [PATCH 14/24] cleanup formatting --- src/libsrc/apple/uthernet2.pla | 96 +++++++++++++++++----------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/src/libsrc/apple/uthernet2.pla b/src/libsrc/apple/uthernet2.pla index fd0c48e..6f80e80 100644 --- a/src/libsrc/apple/uthernet2.pla +++ b/src/libsrc/apple/uthernet2.pla @@ -638,9 +638,9 @@ end // def wizCloseTCP(wiz) if isuge(wiz, @wizChannel) and isult(wiz, @wizChannel + MAX_WIZ_CHANNELS * t_channel) - // - // Clear notiications on this port - // + // + // Clear notiications on this port + // if wiz->channel_proto == WIZ_PROTO_TCP pokereg(wiz=>channel_regs + WIZ_SnCR, $10) // CLOSE wiz->channel_proto = WIZ_PROTO_CLOSED @@ -739,54 +739,54 @@ def wizServiceIP wiz->channel_state = TCP_STATE_OPEN wend fin - if sir & $04 - // - // Receive TCP packet - // - if wiz->channel_state == TCP_STATE_OPEN - rxlen = peekregw(wizregs + WIZ_SnRSR) - rxrr = peekregw(wizregs + WIZ_SnRXRD) - rxwr = rxrr & WIZ_RXMASK - rxpkt = heapalloc(rxlen) - if rxwr + rxlen > WIZ_RXSIZE - splitlen = WIZ_RXSIZE - rxwr - peekregs(wizdata + rxwr, rxpkt, splitlen) - peekregs(wizdata, rxpkt + splitlen, rxlen - splitlen) - else - peekregs(wizdata + rxwr, rxpkt, rxlen) + if sir & $04 + // + // Receive TCP packet + // + if wiz->channel_state == TCP_STATE_OPEN + rxlen = peekregw(wizregs + WIZ_SnRSR) + rxrr = peekregw(wizregs + WIZ_SnRXRD) + rxwr = rxrr & WIZ_RXMASK + rxpkt = heapalloc(rxlen) + if rxwr + rxlen > WIZ_RXSIZE + splitlen = WIZ_RXSIZE - rxwr + peekregs(wizdata + rxwr, rxpkt, splitlen) + peekregs(wizdata, rxpkt + splitlen, rxlen - splitlen) + else + peekregs(wizdata + rxwr, rxpkt, rxlen) + fin + pokeregw(wizregs + WIZ_SnRXRD, rxrr + rxlen) + pokereg(wizregs + WIZ_SnCR, $40) // RECV + wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,wiz=>channel_lclport,rxpkt,rxlen,wiz=>channel_recv_parm) + heaprelease(rxpkt) fin - pokeregw(wizregs + WIZ_SnRXRD, rxrr + rxlen) - pokereg(wizregs + WIZ_SnCR, $40) // RECV - wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,wiz=>channel_lclport,rxpkt,rxlen,wiz=>channel_recv_parm) - heaprelease(rxpkt) fin - fin - if sir & $02 - // - // Close TCP socket - // - if wiz->channel_state == TCP_STATE_OPEN // Notify callback w/ len = 0 - wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,0,wiz=>channel_lclport,0,wiz=>channel_recv_parm) + if sir & $02 + // + // Close TCP socket + // + if wiz->channel_state == TCP_STATE_OPEN // Notify callback w/ len = 0 + wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,0,wiz=>channel_lclport,0,wiz=>channel_recv_parm) + fin + wiz->channel_state = TCP_STATE_CLOSED + pokereg(wiz=>channel_regs + WIZ_SnCR, $10) // CLOSE + fin + if sir & $08 + // + // Timeout on TCP socket + // + when wiz->channel_state + is TCP_STATE_OPEN + wiz->channel_state = TCP_STATE_CLOSING + wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,wiz=>channel_lclport,0,0,wiz=>channel_recv_parm) + break + is TCP_STATE_CONNECT + wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,wiz=>channel_lclport,0,0,wiz=>channel_recv_parm) + is TCP_STATE_CLOSING + wiz->channel_state = TCP_STATE_CLOSED + pokereg(wiz=>channel_regs + WIZ_SnCR, $10) // CLOSE + wend fin - wiz->channel_state = TCP_STATE_CLOSED - pokereg(wiz=>channel_regs + WIZ_SnCR, $10) // CLOSE - fin - if sir & $08 - // - // Timeout on TCP socket - // - when wiz->channel_state - is TCP_STATE_OPEN - wiz->channel_state = TCP_STATE_CLOSING - wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,wiz=>channel_lclport,0,0,wiz=>channel_recv_parm) - break - is TCP_STATE_CONNECT - wiz=>channel_recv_func(@wiz=>channel_remip,wiz=>channel_remport,wiz=>channel_lclport,0,0,wiz=>channel_recv_parm) - is TCP_STATE_CLOSING - wiz->channel_state = TCP_STATE_CLOSED - pokereg(wiz=>channel_regs + WIZ_SnCR, $10) // CLOSE - wend - fin wend fin wiz = wiz + t_channel From fe6742d33e11983efe5d3a3daa7ce40fda11c06a Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 22 Jul 2018 19:25:28 -0700 Subject: [PATCH 15/24] Set retry count back to 4 with longer delay - add debug print to uthernet2 --- src/libsrc/apple/uthernet2.pla | 1 + src/libsrc/dhcp.pla | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libsrc/apple/uthernet2.pla b/src/libsrc/apple/uthernet2.pla index 6f80e80..f01e645 100644 --- a/src/libsrc/apple/uthernet2.pla +++ b/src/libsrc/apple/uthernet2.pla @@ -693,6 +693,7 @@ def wizServiceIP ir = peekreg(WIZ_IR) if ir + puth(ir);putln wiz = @wizChannel for i = 0 to 3 // diff --git a/src/libsrc/dhcp.pla b/src/libsrc/dhcp.pla index 1fd8311..2bc94d6 100644 --- a/src/libsrc/dhcp.pla +++ b/src/libsrc/dhcp.pla @@ -206,14 +206,14 @@ repeat optsSRV = 255 DHCP.dhcp_secs.1 = retry iNet:sendUDP(portDHCP, 0, DHCP_SERVER_PORT, @DHCP, @optsSRV - @DHCP + 1) - for timeout = 0 to 1000 + for timeout = 0 to 4000 iNet:serviceIP() if optsOP.2 == DHCP_ACK break fin next retry++ -until retry > 16 or optsOP.2 == DHCP_ACK +until retry > 4 or optsOP.2 == DHCP_ACK iNet:closeUDP(portDHCP) iNet:setInterfaceIP(@localip, @localnet, @localgw) puts("Apple II bound to:\n");putip(@localip);putc('/');putip(@localnet);putln From 34c8a2efa3a8413d3a4319386ffe55ac591d18ed Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 26 Jul 2018 11:53:38 -0700 Subject: [PATCH 16/24] Fix Uthernet2 MAC address (doesn't like non-zero MSB) --- src/libsrc/apple/uthernet2.pla | 46 ++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/libsrc/apple/uthernet2.pla b/src/libsrc/apple/uthernet2.pla index f01e645..4e5bb87 100644 --- a/src/libsrc/apple/uthernet2.pla +++ b/src/libsrc/apple/uthernet2.pla @@ -75,7 +75,7 @@ word[] rom word saveidx byte regidx byte regdata -byte[] slot +byte slot // // Wiznet MAC address // @@ -144,9 +144,9 @@ const ICMP_ECHO_REPLY = 0 // ICMP message format // struc t_icmp - byte icmp_type - byte icmp_code - word icmp_chksm + byte icmp_type + byte icmp_code + word icmp_chksm word[2] icmp_header end // @@ -155,9 +155,9 @@ end struc t_piphdr byte[IP4ADR_SIZE] pip_src byte[IP4ADR_SIZE] pip_dst - byte pip_zero - byte pip_proto - word pip_len + byte pip_zero + byte pip_proto + word pip_len end // // UDP header @@ -180,15 +180,15 @@ end // // Local network parameters // -const MAX_WIZ_CHANNELS = 4 +const MAX_WIZ_CHANNELS = 4 // // Channel protocols // -const WIZ_PROTO_CLOSED = 0 -const WIZ_PROTO_TCP = 1 -const WIZ_PROTO_UDP = 2 -const WIZ_PROTO_IP = 3 -const WIZ_PROTO_RAW = 4 +const WIZ_PROTO_CLOSED = 0 +const WIZ_PROTO_TCP = 1 +const WIZ_PROTO_UDP = 2 +const WIZ_PROTO_IP = 3 +const WIZ_PROTO_RAW = 4 // // State transistions // @@ -221,7 +221,7 @@ export word hookICMP // Defines for ASM routines // asm equates - !SOURCE "vmsrc/plvmzp.inc" + !SOURCE "vmsrc/plvmzp.inc" end // // Swap bytes in word @@ -474,9 +474,9 @@ def wizOpenUDP(localport, callback, param) wiz=>channel_lclport = localport wiz=>channel_recv_func = callback wiz=>channel_recv_parm = param + pokereg(wiz=>channel_regs + WIZ_SnMR, $02) // UDP protocol pokeregw(wiz=>channel_regs + WIZ_SnPORT, localport) - pokereg(wiz=>channel_regs + WIZ_SnMR, $02) // UDP protocol - pokereg(wiz=>channel_regs + WIZ_SnCR, $01) // OPEN + pokereg(wiz=>channel_regs + WIZ_SnCR, $01) // OPEN return wiz end // @@ -541,9 +541,9 @@ def wizListenTCP(lclport, callback, param) wiz=>channel_lclport = lclport wiz=>channel_recv_func = callback wiz=>channel_recv_parm = param - pokereg(wiz=>channel_regs + WIZ_SnMR, $01) // TCP protocol + pokereg(wiz=>channel_regs + WIZ_SnMR, $01) // TCP protocol pokeregw(wiz=>channel_regs + WIZ_SnPORT, lclport) - pokereg(wiz=>channel_regs + WIZ_SnCR, $01) // OPEN + pokereg(wiz=>channel_regs + WIZ_SnCR, $01) // OPEN while peekreg(wiz=>channel_regs + WIZ_SnSR) <> $13; loop // Wait for init pokereg(wiz=>channel_regs + WIZ_SnCR, $02) // LISTEN return wiz @@ -623,7 +623,7 @@ def wizSendTCP(wiz, data, len) pokeregs(wizdata + txrr, data, splitlen) pokeregs(wizdata, data + splitlen, len - splitlen) //putc('(');puti(splitlen);putc(',');puti(len-splitlen);putc(')') - else + else pokeregs(wizdata + txrr, data, len) fin // @@ -693,7 +693,6 @@ def wizServiceIP ir = peekreg(WIZ_IR) if ir - puth(ir);putln wiz = @wizChannel for i = 0 to 3 // @@ -703,7 +702,7 @@ def wizServiceIP wizregs = wiz=>channel_regs wizdata = wiz=>channel_rxmem sir = peekreg(wizregs + WIZ_SnIR) - pokereg(wiz=>channel_regs + WIZ_SnIR, sir) // Clear SnIR + pokereg(wizregs + WIZ_SnIR, sir) // Clear SnIR when wiz->channel_proto is WIZ_PROTO_UDP if sir & $04 @@ -861,7 +860,9 @@ for slot = $90 to $F0 step $10 regdata = slot + 3 _pokedata.1 = regdata _peekdata.1 = regdata - pokeio(slot, $03) // Auto-increment indirect I/F + enable ping + repeat + pokeio(slot, $03) // Auto-increment indirect I/F + enable ping + until peekio(slot) == $03 // // The following looks redundant, but it sets up the peek/poke locations // for peekreg(s)/pokereg(s) @@ -872,6 +873,7 @@ for slot = $90 to $F0 step $10 // // Initialize common registers // + wizMAC[5] = slot >> 4 // Slighty unique MAC address pokeregs(WIZ_SHAR, @wizMAC, 6) // MAC addr pokeregw(WIZ_RTR, 5000) // Timeout period to 500ms pokereg(WIZ_RMSR, $55) // 2K Rx memory/channel From 2d8f2b9b2239fd1205f1f13515a52b8f873b5ed7 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 26 Jul 2018 16:21:49 -0700 Subject: [PATCH 17/24] Fix JIT16 SEC bug --- images/apple/PLASMA-BLD2.PO | Bin 143360 -> 143360 bytes images/apple/PLASMA-SYS2.PO | Bin 143360 -> 143360 bytes images/apple/PLASMA.2mg | Bin 819264 -> 819264 bytes src/libsrc/apple/jit16.pla | 7 ++-- src/libsrc/jit16core.pla | 76 ++++++++++++++++++------------------ 5 files changed, 42 insertions(+), 41 deletions(-) diff --git a/images/apple/PLASMA-BLD2.PO b/images/apple/PLASMA-BLD2.PO index 02345b8405896d909d7e1c99bb942b21d1b9c18b..5c06ff0ee3ee32325f2a64f29beae9b5bd2b0687 100644 GIT binary patch delta 506 zcmY+AJxjwt7{{MWBWatq)M_#~31)Jr3i<)k(uq#^2~-SFIWr_^;p3uroikESJV3#=0*jeqPGf+5;VSTzfQuMe@TV#PL% z6UIS~1dT9`#D2>d8KY4xhw@TmlxiLgg1Bry=I6w*M;YBO;e?;lbq;MBE|L?JRoh+E rsgk^XUNKKC000CM0RsR)0sx&P mAqyh_;{X7mBpe5WVF$Ni2LYdaquAU50>Q(R0RsM}h5@QhHx~;4 diff --git a/images/apple/PLASMA-SYS2.PO b/images/apple/PLASMA-SYS2.PO index d81c825766d6208a6452698938837222e881eaec..7667177580451697df49b15d3653bb03a39ff952 100755 GIT binary patch delta 4660 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 N&B7|P!xi7u+5ab@MM%g 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 delta 10097 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 = $A0 // LDY #$0000 codeptr=>1 = $0000 - codeptr=>3 = tmp16+$85 // STA TMP + codeptr=>3 = tmp8+$85 // STA TMP codeptr=>5 = $3868 // PLA; SEC - codeptr=>7 = tmp16+$E5 // SBC TMP + codeptr=>7 = tmp8+$E5 // SBC TMP codeptr=>9 = $0350 // BVC +3 codeptr->11 = $49 // EOR #$8000 codeptr=>12 = $8000 @@ -562,7 +562,7 @@ def compiler(defptr)#0 codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y codeptr->2 = $A9 // LDA #imm codeptr=>3 = codeptr + 12 - codeptr=>5 = $F285 // STA IP + codeptr=>5 = ip8+$85 // STA IP codeptr=>7 = $00A0 // LDY #$00 codeptr->9 = $4C // JMP FETCHOP codeptr=>10 = fetchop // FETCHOP @@ -611,9 +611,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr=>4 = tmp16+$B2 // LDA (TMP) + codeptr=>4 = tmp8+$B2 // LDA (TMP) codeptr=>6 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM codeptr->8 = $29 // AND #$00FF codeptr=>9 = $00FF @@ -625,8 +625,8 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = tmp16+$85 // STA TMP - codeptr=>2 = tmp16+$B2 // LDA (TMP) + codeptr=>0 = tmp8+$85 // STA TMP + codeptr=>2 = tmp8+$B2 // LDA (TMP) codeptr = codeptr + 4 A_IS_TOS = TRUE // PHA break @@ -638,7 +638,7 @@ def compiler(defptr)#0 ^codeptr = $48; codeptr++ // PHA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -656,7 +656,7 @@ def compiler(defptr)#0 ^codeptr = $48; codeptr++ // PHA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -711,7 +711,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -738,7 +738,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -757,10 +757,10 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr->2 = $68 // PLA codeptr=>3 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr=>5 = tmp16+$92 // STA (TMP) + codeptr=>5 = tmp8+$92 // STA (TMP) codeptr=>7 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM codeptr = codeptr + 9 A_IS_TOS = FALSE @@ -770,9 +770,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr->2 = $68 // PLA - codeptr=>3 = tmp16+$92 // STA (TMP) + codeptr=>3 = tmp8+$92 // STA (TMP) codeptr = codeptr + 5 A_IS_TOS = FALSE break @@ -848,9 +848,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr=>2 = $3868 // PLA; SEC - codeptr=>4 = tmp16+$E5 // SBC TMP + codeptr=>4 = tmp8+$E5 // SBC TMP codeptr = codeptr + 6 A_IS_TOS = TRUE break @@ -881,7 +881,7 @@ def compiler(defptr)#0 codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y codeptr->2 = $A9 // LDA #imm codeptr=>3 = codeptr + 12 - codeptr=>5 = ip16+$85 // STA IP + codeptr=>5 = ip8+$85 // STA IP codeptr=>7 = $00A0 // LDY #$00 codeptr->9 = $4C // JMP FETCHOP codeptr=>10 = fetchop // FETCHOP @@ -1076,10 +1076,10 @@ def compiler(defptr)#0 // SUB // //puts("SUBBRGE "); puti(dest) - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr=>2 = $A3+(TOS<<8) // LDA S,TOS - codeptr->4 = $68 // SEC - codeptr=>5 = tmp16+$E5 // SBC TMP + codeptr->4 = $38 // SEC + codeptr=>5 = tmp8+$E5 // SBC TMP codeptr=>7 = $83+(TOS<<8) // STA S,TOS codeptr = codeptr + 9 fin @@ -1133,16 +1133,16 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr=>2 = $B5+(j<<8) // LDA dp,X codeptr->4 = $29 // AND #$00FF codeptr=>5 = $00FF codeptr->7 = $18 // CLC - codeptr=>8 = tmp16+$65 // ADC TMP + codeptr=>8 = tmp8+$65 // ADC TMP codeptr = codeptr + 10 A_IS_TOS = TRUE // PHA break @@ -1154,7 +1154,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -1174,7 +1174,7 @@ def compiler(defptr)#0 // // Ensure only byte sized accesses to H/W addresses // - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM codeptr->4 = $AD // LDA abs codeptr=>5 = dest @@ -1182,16 +1182,16 @@ def compiler(defptr)#0 codeptr->9 = $29 // AND #$00FF codeptr=>10 = $00FF codeptr->12 = $18 // CLC - codeptr=>13 = tmp16+$65 // ADC TMP + codeptr=>13 = tmp8+$65 // ADC TMP codeptr = codeptr + 15 else - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr->2 = $AD // LDA abs codeptr=>3 = dest codeptr->5 = $29 // AND #$00FF codeptr=>6 = $00FF codeptr->8 = $18 // CLC - codeptr=>9 = tmp16+$65 // ADC TMP + codeptr=>9 = tmp8+$65 // ADC TMP codeptr = codeptr + 11 fin A_IS_TOS = TRUE // PHA @@ -1215,16 +1215,16 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr=>2 = $B5+(j<<8) // LDA dp,X codeptr->4 = $29 // AND #$00FF codeptr=>5 = $00FF codeptr->7 = $0A // ASL - codeptr=>8 = tmp16+$65 // ADC TMP + codeptr=>8 = tmp8+$65 // ADC TMP codeptr = codeptr + 10 A_IS_TOS = TRUE // PHA break @@ -1236,7 +1236,7 @@ def compiler(defptr)#0 ^codeptr = $68; codeptr++ // PLA fin if not X_IS_IFP - *codeptr = ifp16+$A6 // LDX IFP + *codeptr = ifp8+$A6 // LDX IFP codeptr = codeptr + 2 X_IS_IFP = TRUE fin @@ -1258,7 +1258,7 @@ def compiler(defptr)#0 // // Ensure only byte sized accesses to H/W addresses // - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM codeptr->4 = $AD // LDA abs codeptr=>5 = dest @@ -1266,16 +1266,16 @@ def compiler(defptr)#0 codeptr->9 = $29 // AND #$00FF codeptr=>10 = $00FF codeptr->12 = $0A // ASL - codeptr=>13 = tmp16+$65 // ADC TMP + codeptr=>13 = tmp8+$65 // ADC TMP codeptr = codeptr + 15 else - codeptr=>0 = tmp16+$85 // STA TMP + codeptr=>0 = tmp8+$85 // STA TMP codeptr->2 = $AD // LDA abs codeptr=>3 = dest codeptr->5 = $29 // AND #$00FF codeptr=>6 = $00FF codeptr->8 = $0A // ASL - codeptr=>9 = tmp16+$65 // ADC TMP + codeptr=>9 = tmp8+$65 // ADC TMP codeptr = codeptr + 11 fin A_IS_TOS = TRUE // PHA From 3f23acf49cd368c08cb77213bc263e77d3404c4d Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 26 Sep 2018 15:51:35 -0700 Subject: [PATCH 18/24] Clean up when/is evaluation --- README.md | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 6d0917c..99e8d19 100755 --- a/README.md +++ b/README.md @@ -518,7 +518,7 @@ else fin ``` -The `when`/`is`/`otherwise`/`wend` statement is similar to the `if`/`elsif`/`else`/`fin` construct except that it is more efficient. It selects one path based on the evaluated expressions, then merges the code path back together at the end. Only the `when` value is compared against a list of expressions. The expressions do not need to be constants, they can be any valid expression. The list of expressions is evaluated in order, so for efficiency sake, place the most common cases earlier in the list. Just as in C programs, a `break` statement is required to keep one clause from falling through to the next. Falling through from one clause to the next can have its uses, so this behavior has been added to PLASMA. +The `when`/`is`/`otherwise`/`wend` statement is similar to the `if`/`elsif`/`else`/`fin` construct except that it is more efficient. It selects one path based on the evaluated expressions, then merges the code path back together at the end. Only the `when` value is compared against a list of constant. Just as in C programs, a `break` statement is required to keep one clause from falling through to the next. Falling through from one clause to the next can have its uses, so this behavior has been added to PLASMA. ``` when keypressed @@ -1139,7 +1139,7 @@ The common `if` test can have optional `elsif` and/or `else` clauses. Any expres #### WHEN/IS/[OTHERWISE]/WEND -The complex test case is handled with `when`. Basically an `if`, `elsif`, `else` list of comparisons, it is generally more efficient. The `is` value can be any expression. It is evaluated and tested for equality to the `when` value. +The complex test case is handled with `when`. Basically an `if`, `elsif`, `else` list of comparisons, it is generally more efficient. The `is` value must be a constant. ``` when key @@ -1162,26 +1162,6 @@ when key wend ``` -With a little "Yoda-Speak", some fairly complex test can be made: - -``` -const FALSE = 0 -const TRUE = NOT FALSE - -byte a - -when TRUE - is (a <= 10) - // 10 or less - break - is (a > 10) AND (a < 20) - // between 10 and 20 - break - is (a >= 20) - // 20 or greater -wend -``` - A `when` clause can fall-through to the following clause, just like C `switch` statements by leaving out the `break`. #### FOR \ [STEP]/NEXT From 7a5578277f6b31a6ce7da9215c3016f53fb55ce4 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 1 Oct 2018 16:24:01 -0700 Subject: [PATCH 19/24] Fix over optimization of immediate opcodes --- src/vmsrc/plvm.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/vmsrc/plvm.c b/src/vmsrc/plvm.c index c636fab..7cc2848 100755 --- a/src/vmsrc/plvm.c +++ b/src/vmsrc/plvm.c @@ -640,19 +640,23 @@ void interp(code *ip) case 0x36: // DIVMOD break; case 0x38: // ADDI - PUSH(POP + BYTE_PTR(ip)); + val = POP + BYTE_PTR(ip); + PUSH(val); ip++; break; case 0x3A: // SUBI - PUSH(POP - BYTE_PTR(ip)); + val = POP - BYTE_PTR(ip); + PUSH(val); ip++; break; case 0x3C: // ANDI - PUSH(POP & BYTE_PTR(ip)); + val = POP & BYTE_PTR(ip); + PUSH(val); ip++; break; case 0x3E: // ORI - PUSH(POP | BYTE_PTR(ip)); + val = POP | BYTE_PTR(ip); + PUSH(val); ip++; break; /* From 76d010392ac9d5a52d754bbfb33e9cc721646cc4 Mon Sep 17 00:00:00 2001 From: Ian Flanigan Date: Wed, 14 Nov 2018 20:25:12 +0000 Subject: [PATCH 20/24] Implement puth in plvm This change adds a simple implementation of puth() that is just printf("%04X", i). This corresponds with the native implementations for both Apple and C64. --- src/vmsrc/plvm.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vmsrc/plvm.c b/src/vmsrc/plvm.c index 7cc2848..9f161c5 100755 --- a/src/vmsrc/plvm.c +++ b/src/vmsrc/plvm.c @@ -509,6 +509,10 @@ void call(uword pc) mem_data[0x1FF] = i; PUSH(0x1FF); break; + case 10: // LIBRARY STDLIB::PUTH + i = UPOP; + printf("%04X", i); + break; case 24: // LIBRARY CMDSYS::DIVMOD a = POP; b = POP; From ce0b92bf8c6750bab1fa097ed4e1b88dedba57cc Mon Sep 17 00:00:00 2001 From: Ian Flanigan Date: Sun, 18 Nov 2018 12:02:23 +0000 Subject: [PATCH 21/24] Prefer pointer types in prefix operator parsing This fixes issue #49 in the simplest way. Before, if the dereferenced variable was a byte type, the result of the word pointer dereference operator, `*`, would be a byte type. This caused `*@a` to return a byte if `a` was a byte type. Now the pointer type is used instead, causing `*@a` to return a word. Prefix operator parsing allows some nonsensical constructions, like `@*x`, but these were already possible before. Before the output from: ``` include "inc/cmdsys.plh" byte a byte b word x a = 5 b = 6 x = $55FF puti(*@a) // 5 putln() puti(*(@a)) // 1541 putln() puti(@*a) // 5 putln() puti(^@x) // 255 putln() puti(^(@x)) // 255 putln() puti(@^x) // 255 putln() done ``` was: ``` 5 1541 5 255 255 255 ``` now it is: ``` 1541 1541 1541 255 255 255 ``` --- src/toolsrc/parse.c | 8 ++++++-- src/toolsrc/parse.pla | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/toolsrc/parse.c b/src/toolsrc/parse.c index 2349fc5..619fc00 100755 --- a/src/toolsrc/parse.c +++ b/src/toolsrc/parse.c @@ -651,9 +651,13 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth) cfnparms = 0; cfnvals = 1; type &= ~FUNC_TYPE; } - else if (type & (BYTE_TYPE | BPTR_TYPE)) + else if (type & (BPTR_TYPE)) // Prefer the pointer type. valseq = gen_lb(valseq); - else if (type & (WORD_TYPE | WPTR_TYPE)) + else if (type & (WPTR_TYPE)) + valseq = gen_lw(valseq); + else if (type & (BYTE_TYPE)) + valseq = gen_lb(valseq); + else if (type & (WORD_TYPE)) valseq = gen_lw(valseq); else parse_error("What are we dereferencing?"); diff --git a/src/toolsrc/parse.pla b/src/toolsrc/parse.pla index fb0d73b..5f44cf2 100644 --- a/src/toolsrc/parse.pla +++ b/src/toolsrc/parse.pla @@ -461,9 +461,13 @@ def parse_value(codeseq, r_val)#2 valseq = gen_op(valseq, ICAL_CODE) stackdepth = stackdepth + cfnvals - 1 type = type & ~FUNC_TYPE - elsif type & (BYTE_TYPE | BPTR_TYPE) + elsif type & (BPTR_TYPE) // Prefer the pointer type. valseq = gen_op(valseq, LB_CODE) - elsif type & (WORD_TYPE | WPTR_TYPE) + elsif type & (WPTR_TYPE) + valseq = gen_op(valseq, LW_CODE) + elsif type & (BYTE_TYPE) + valseq = gen_op(valseq, LB_CODE) + elsif type & (WORD_TYPE) valseq = gen_op(valseq, LW_CODE) else exit_err(ERR_INVAL|ERR_CODE) From a8629a4f9af00f0a1a80e731af916e76e7bb1b5b Mon Sep 17 00:00:00 2001 From: Ian Flanigan Date: Sun, 25 Nov 2018 17:04:21 +0100 Subject: [PATCH 22/24] Remove duplicate token declaration from lex.c Before this change, there were two declarations for the 'res' token. Now there is only one. --- src/toolsrc/lex.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/toolsrc/lex.c b/src/toolsrc/lex.c index 5544a3d..555b256 100755 --- a/src/toolsrc/lex.c +++ b/src/toolsrc/lex.c @@ -50,7 +50,6 @@ t_token keywords[] = { BYTE_TOKEN, 'R', 'E', 'S', BYTE_TOKEN, 'B', 'Y', 'T', 'E', BYTE_TOKEN, 'C', 'H', 'A', 'R', - BYTE_TOKEN, 'R', 'E', 'S', WORD_TOKEN, 'W', 'O', 'R', 'D', WORD_TOKEN, 'V', 'A', 'R', CONST_TOKEN, 'C', 'O', 'N', 'S', 'T', From 9a5bf76b7109ec4bbfa11876e5b9679c612cbf1e Mon Sep 17 00:00:00 2001 From: Ian Flanigan Date: Sun, 25 Nov 2018 17:46:26 +0100 Subject: [PATCH 23/24] Remove duplicate token declaration from plasm.pla Before this change, there were two declarations for the 'res' token. Now there is only one. --- src/toolsrc/plasm.pla | 1 - 1 file changed, 1 deletion(-) diff --git a/src/toolsrc/plasm.pla b/src/toolsrc/plasm.pla index 82f9e7a..c6ab52c 100755 --- a/src/toolsrc/plasm.pla +++ b/src/toolsrc/plasm.pla @@ -152,7 +152,6 @@ byte = "AND", LOGIC_AND_TKN byte = "NOT", LOGIC_NOT_TKN byte = "RES", BYTE_TKN byte = "VAR", WORD_TKN -byte = "RES", BYTE_TKN byte = "WORD", WORD_TKN byte = "CHAR", BYTE_TKN byte = "BYTE", BYTE_TKN From 49188358af301c024e7e8cbb14c1a60187eb8456 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 17 Dec 2018 13:24:15 -0800 Subject: [PATCH 24/24] Replace gets() with fgets() --- src/vmsrc/plvm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vmsrc/plvm.c b/src/vmsrc/plvm.c index 9f161c5..f20ac8f 100755 --- a/src/vmsrc/plvm.c +++ b/src/vmsrc/plvm.c @@ -502,7 +502,7 @@ void call(uword pc) case 8: // LIBRARY STDLIB::GETS c = POP; putchar(c); - gets(sz); + fgets(sz, 63, stdin); for (i = 0; sz[i]; i++) mem_data[0x200 + i] = sz[i]; mem_data[0x200 + i] = 0; @@ -561,7 +561,7 @@ void interp(code *ip) while (dsp >= esp) printf("$%04X ", (*dsp--) & 0xFFFF); printf("]\n"); - gets(cmdline); + fgets(cmdline, 15, stdin); } previp = ip; switch (*ip++)