1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-07-20 13:28:56 +00:00

Fixing more PLASMA16 bugs

This commit is contained in:
David Schmenk 2017-11-30 18:24:58 -08:00
parent 3b0e0fb861
commit 944905e965
2 changed files with 180 additions and 151 deletions

View File

@ -63,69 +63,69 @@ word textmode = @a2textmode
// Common routines.
//
asm equates
!SOURCE "vmsrc/plvmzp.inc"
!SOURCE "vmsrc/plvmzp.inc"
end
//
// def grscrn(rowaddrs)
//
asm grscrn(rowaddrs)#0
GRSCRN = $26
GRSCRNL = GRSCRN
GRSCRNH = GRSCRNL+1
LDA ESTKL,X
STA GRSCRNL
LDA ESTKH,X
STA GRSCRNH
INX
RTS
GRSCRN = $26
GRSCRNL = GRSCRN
GRSCRNH = GRSCRNL+1
LDA ESTKL,X
STA GRSCRNL
LDA ESTKH,X
STA GRSCRNH
INX
RTS
end
//
// def grcolor(color)
//
asm grcolor(color)#0
GRCLR = $30
LDA #$0F
AND ESTKL,X
STA GRCLR
ASL
ASL
ASL
ASL
ORA GRCLR
STA GRCLR
INX
RTS
GRCLR = $30
LDA #$0F
AND ESTKL,X
STA GRCLR
ASL
ASL
ASL
ASL
ORA GRCLR
STA GRCLR
INX
RTS
end
//
// def grplot(x, y)
//
asm grplot(x, y)#0
STY IPY
LDA ESTKL,X
AND #$FE
CMP ESTKL,X
TAY
LDA (GRSCRN),Y
STA DSTL
INY
LDA (GRSCRN),Y
STA DSTH
LDA #$FF
ADC #$00
EOR #$0F
TAY
AND GRCLR
STA TMPL
TYA
EOR #$FF
LDY ESTKL+1,X
AND (DST),Y
ORA TMPL
STA (DST),Y
LDY IPY
INX
INX
RTS
STY IPY
LDA ESTKL,X
AND #$FE
CMP ESTKL,X
TAY
LDA (GRSCRN),Y
STA DSTL
INY
LDA (GRSCRN),Y
STA DSTH
LDA #$FF
ADC #$00
EOR #$0F
TAY
AND GRCLR
STA TMPL
TYA
EOR #$FF
LDY ESTKL+1,X
AND (DST),Y
ORA TMPL
STA (DST),Y
LDY IPY
INX
INX
RTS
end
//
// Apple II routines.
@ -228,27 +228,27 @@ def rod#0
byte i, j, k, w, fmi, fmk, color
while TRUE
for w = 3 to 50
for i = 1 to 19
for j = 0 to 19
k = i + j
color = (j * 3) / (i + 3) + i * w / 12
fmi = 40 - i
fmk = 40 - k
grcolor(color)#0
grplot(i, k)#0
grplot(k, i)#0
grplot(fmi, fmk)#0
grplot(fmk, fmi)#0
grplot(k, fmi)#0
grplot(fmi, k)#0
grplot(i, fmk)#0
grplot(fmk, i)#0
if keypressed()#1
return
fin
next
next
next
for i = 1 to 19
for j = 0 to 19
k = i + j
color = (j * 3) / (i + 3) + i * w / 12
fmi = 40 - i
fmk = 40 - k
grcolor(color)#0
grplot(i, k)#0
grplot(k, i)#0
grplot(fmi, fmk)#0
grplot(fmk, fmi)#0
grplot(k, fmi)#0
grplot(fmi, k)#0
grplot(i, fmk)#0
grplot(fmk, i)#0
if keypressed()#1
return
fin
next
next
next
loop
end
//
@ -257,18 +257,18 @@ end
when MACHID & $C8
is $08 // Apple 1
puts(@a1err)
return
return
is $C0 // Apple ///
keypressed = @a3keypressed
gotoxy = @a3gotoxy
grmode = @a3grmode
textmode = @a3textmode
if modaddr(@cmdsys):0 == $0010
devcons = modaddr(@cmdsys).5 // devcons variable from cmdsys
else
puts(@a3err)
return
fin
gotoxy = @a3gotoxy
grmode = @a3grmode
textmode = @a3textmode
if modaddr(@cmdsys):0 == $0010
devcons = modaddr(@cmdsys).5 // devcons variable from cmdsys
else
puts(@a3err)
return
fin
otherwise // Apple ][
wend
grmode(MIXMODE)#0

View File

@ -51,8 +51,8 @@ ALTWROFF= $C004
ALTWRON = $C005
!SOURCE "vmsrc/plvmzp.inc"
HWSP = TMPH+1
DROP = $EE
NEXTOP = $EF
DROP = $EF
NEXTOP = DROP+1
FETCHOP = NEXTOP+3
IP = FETCHOP+1
IPL = IP
@ -321,6 +321,10 @@ CMDENTRY = *
BIT $C051
BIT $C05F
JSR $FC58 ; HOME
!IF DEBUG {
LDA #20 ; SET TEXT WINDOW ABOVE DEBUG OUTPUT
STA $23
}
;
; INSTALL PAGE 0 FETCHOP ROUTINE
;
@ -403,14 +407,14 @@ PAGE0 = *
;* *
;******************************
!PSEUDOPC DROP {
PLA ; DROP @ $EE
INY ; NEXTOP @ $EF
PLA ; DROP @ $EF
INY ; NEXTOP @ $F0
BEQ NEXTOPH
LDX $FFFF,Y ; FETCHOP @ $F2, IP MAPS OVER $FFFF @ $F3
LDX $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4
JMP (OPTBL,X) ; OPIDX AND OPPAGE MAP OVER OPTBL
NEXTOPH SEP #$20 ; SET 8 BIT MODE
INC IPH
REP #$20 ; SET 16 BIT MODE
NEXTOPH LDX IPH
INX
STX IPH
BRA FETCHOP
}
PAGE3 = *
@ -480,6 +484,19 @@ PRCHR ORA #$80
STA $7D0,X
INX
RTS
PRBYTE PHA
LDA #'$'
JSR PRCHR
PLA
JMP PRHEX
PRWORD PHA
LDA #'$'
JSR PRCHR
XBA
JSR PRHEX
PLA
JMP PRHEX
;*****************
;* *
;* DEBUG TABLE *
@ -499,6 +516,9 @@ DBGTBL !WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; 00 02 04 06 08
;* DEBUG STEP ROUTINE
;*
STEP STX TMPL
LDX $C013 ; SAVE RAMRD
STX $C002
STX TMPH
SEP #$20 ; 8 BIT A/M
!AS
LDX #39 ; SCROLL PREVIOUS LINES UP
@ -510,9 +530,10 @@ STEP STX TMPL
STA $750,X
DEX
BPL -
LDX #$00
LDA #'$'
JSR PRCHR
BIT TMPH ; RAMRD SET?
BPL +
STA $C003
+ LDX #$00
REP #$20 ; 16 BIT A/M
!AL
TYA
@ -520,43 +541,41 @@ STEP STX TMPL
ADC IP
SEP #$20 ; 8 BIT A/M
!AS
XBA
JSR PRHEX
XBA
JSR PRHEX
JSR PRWORD
LDA #':'
JSR PRCHR
LDA #'$'
JSR PRCHR
LDA (IP),Y
JSR PRHEX
JSR PRBYTE
INX
LDA #'$'
JSR PRCHR
REP #$20 ; 16 BIT A/M
!AL
TSC
SEP #$20 ; 8 BIT A/M
!AS
XBA
JSR PRHEX
XBA
JSR PRHEX
JSR PRWORD
LDA #':'
JSR PRCHR
TXA
STX TMPH
TSX
CPX HWSP
BEQ +
TAX
LDA #'$'
BEQ ++
BCC +
LDX TMPH
LDA #' '
JSR PRCHR
LDA TOS+1,S
JSR PRHEX
LDA TOS,S
JSR PRHEX
BRA ++
+ TAX
LDA #'<' ; STACK UNDERFLOW!
JSR PRCHR
JSR PRCHR
JSR PRCHR
JSR PRCHR
BRA DBGKEY
+ LDA $102,X
XBA
LDA $101,X
LDX TMPH
JSR PRWORD
BRA +++
++ LDX TMPH
LDA #' '
JSR PRCHR
LDA #'-'
@ -564,28 +583,31 @@ STEP STX TMPL
JSR PRCHR
JSR PRCHR
JSR PRCHR
++ ;LDX $C010
+++ ;LDX $C010
LDA #' '
- JSR PRCHR
CPX #40
BNE -
; LDX TMPL
; CPX #$48 ; FORCE PAUSE AT 'IS_GE'
; BEQ DBGKEY
- LDX $C000
;BPL -
;STX $C010
CPX #$9B
BNE +
STX $C010
BNE ++
DBGKEY STX $C010
- LDX $C000
BPL -
CPX #$9B
BEQ +
BEQ ++
STX $C010
;SEC ; SWITCH TO EMU MODE
;XCE
;BRK
+ REP #$20 ; 16 BIT A/M
CPX #$80+'Q'
BNE ++
SEC ; SWITCH TO EMU MODE
XCE
BRK
++ REP #$20 ; 16 BIT A/M
!AL
LDX TMPL
+ LDX TMPL
DBG_OP JMP (OPTBL,X)
}
;*********************************************************************
@ -608,7 +630,7 @@ ADD PLA
SUB LDA NOS,S
SEC
SBC TOS,S
STA NOS,X
STA NOS,S
JMP DROP
;*
;* SHIFT TOS LEFT BY 1, ADD TO TOS-1
@ -640,53 +662,38 @@ MULLP ASL TMP ;LSR TMP ; MULTPLR
;*
;* INTERNAL DIVIDE ALGORITHM
;*
_NEG EOR #$FFFF
INC
SEC
SBC TOS,S
STA TOS,S
RTS
_DIV STY IPY
LDY #$11 ; #BITS+1
LDX #$00
LDA TOS,S
LDA TOS+2,S ; WE JSR'ED HERE SO OFFSET ACCORDINGLY
BPL +
LDX #$81
EOR #$FFFF
INC
STA TOS,S
+ LDA NOS,S
STA TOS+2,S
+ LDA NOS+2,S
BPL +
INX
EOR #$FFFF
INC
STA TMP ; NOS,S
+ BEQ _DIVEX
+ STA TMP ; NOS,S
BEQ _DIVEX
_DIV1 ASL ; DVDND
DEY
BCC _DIV1
STA TMP ;NOS,S ; DVDND
LDA #$0000 ; REMNDR
_DIVLP ROL ; REMNDR
CMP TOS,S ; DVSR
CMP TOS+2,S ; DVSR
BCC +
SBC TOS,S ; DVSR
SBC TOS+2,S ; DVSR
SEC
+ ROL TMP ;NOS,S ; DVDND
DEY
BNE _DIVLP
_DIVEX ;STA TMP ; REMNDR
LDY IPY
_DIVEX LDY IPY
RTS
;*
;* NEGATE TOS
;*
NEG LDA #$0000
SEC
SBC TOS,S
STA TOS,S
JMP NEXTOP
;*
;* DIV TOS-1 BY TOS
;*
DIV JSR _DIV
@ -708,6 +715,14 @@ MOD JSR _DIV
BNE NEG
JMP NEXTOP
;*
;* NEGATE TOS
;*
NEG LDA #$0000
SEC
SBC TOS,S
STA TOS,S
JMP NEXTOP
;*
;* INCREMENT TOS
;*
INCR LDA TOS,S
@ -811,9 +826,7 @@ DUP LDA TOS,S
;*
;* PRIVATE EP STASH
;*
EPSAVE !BYTE $01 ; INDEX INTO STASH ARRAY (32 SHOULD BE ENOUGH)
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
EPSAVE !BYTE $01 ; INDEX INTO STASH ARRAY (16 SHOULD BE ENOUGH)
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
;*
@ -826,6 +839,14 @@ PUSHEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM
STA EPSAVE,X
INX
INX
!IF DEBUG {
CPX #33
BCC +
LDX #$80+'>'
STX $7D0+30
LDX #$32
+
}
STX EPSAVE
LDX LCRDEN+LCBNK2 ; REN LC MEM
JMP NEXTOP
@ -837,6 +858,13 @@ PULLEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM
LDX EPSAVE
DEX
DEX
!IF DEBUG {
BPL +
LDX #$80+'<'
STX $7D0+30
LDX #$00
+
}
LDA EPSAVE,X
TCS
STX EPSAVE
@ -1615,6 +1643,7 @@ RET SEP #$20 ; 8 BIT A/M
LDX $C010
+ LDX TMPL
}
TYX
REP #$20 ; 16 BIT A/M
!AL
LDA IFP ; DEALLOCATE POOL