mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-01-22 23:29:55 +00:00
FP6502 in AUX bank on 128K machine
This commit is contained in:
parent
6ea55e3038
commit
b4ce268d47
@ -1,6 +1,6 @@
|
|||||||
include "inc/cmdsys.plh"
|
include "inc/cmdsys.plh"
|
||||||
include "inc/fileio.plh"
|
include "inc/fileio.plh"
|
||||||
|
const AUXADDR = $E000 // Location of SANE on 128K //e or //c
|
||||||
struc t_diskinfo
|
struc t_diskinfo
|
||||||
word codelen
|
word codelen
|
||||||
word codeaddr
|
word codeaddr
|
||||||
@ -20,13 +20,16 @@ export word[7] sane = @fpInit, @uninit1, @uninit2, @uninit1, @uninit2, @uninit0,
|
|||||||
//
|
//
|
||||||
// Pointer to FP6502 entry
|
// Pointer to FP6502 entry
|
||||||
//
|
//
|
||||||
word fp6502, fpzpsave
|
word fp6502
|
||||||
//
|
//
|
||||||
// PLASMA <-> SANE interface routines
|
// PLASMA <-> SANE interface routines
|
||||||
//
|
//
|
||||||
asm equates
|
asm equates
|
||||||
!SOURCE "vmsrc/plvmzp.inc"
|
!SOURCE "vmsrc/plvmzp.inc"
|
||||||
end
|
end
|
||||||
|
//
|
||||||
|
// Main memory FP6502 API
|
||||||
|
//
|
||||||
asm fpOp1(op, dst)#1
|
asm fpOp1(op, dst)#1
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
PHA
|
PHA
|
||||||
@ -72,6 +75,81 @@ asm fixupFP2
|
|||||||
STY ESTKH,X
|
STY ESTKH,X
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
|
//
|
||||||
|
// AUX memory FP6502 API
|
||||||
|
//
|
||||||
|
asm xfpOp1(op, dst)#1
|
||||||
|
LDA ESTKL+1,X
|
||||||
|
STA $02FE
|
||||||
|
LDA ESTKH+1,X
|
||||||
|
STA $02FF
|
||||||
|
LDY ESTKL,X
|
||||||
|
LDA ESTKH,X
|
||||||
|
INX
|
||||||
|
STX ESP
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
|
STA $C009 ; SELECT ALTZP
|
||||||
|
BIT $C083 ; R/W LC BANK2
|
||||||
|
BIT $C083
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
LDA $02FF
|
||||||
|
PHA
|
||||||
|
LDA $02FE
|
||||||
|
PHA
|
||||||
|
JSR $E000
|
||||||
|
STA $C008 ; BACK TO MAINZP
|
||||||
|
PLP
|
||||||
|
TXA
|
||||||
|
LDX ESP
|
||||||
|
STA ESTKL,X
|
||||||
|
STY ESTKH,X
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
asm xfpOp2(op, dst, src)#1
|
||||||
|
LDA ESTKL+2,X
|
||||||
|
STA $02FC
|
||||||
|
LDA ESTKH+2,X
|
||||||
|
STA $02FD
|
||||||
|
LDA ESTKL+1,X
|
||||||
|
STA $02FE
|
||||||
|
LDA ESTKH+1,X
|
||||||
|
STA $02FF
|
||||||
|
LDY ESTKL,X
|
||||||
|
LDA ESTKH,X
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
STX ESP
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
|
STA $C009 ; SELECT ALTZP
|
||||||
|
BIT $C083 ; R/W LC BANK2
|
||||||
|
BIT $C083
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
LDA $02FF
|
||||||
|
PHA
|
||||||
|
LDA $02FE
|
||||||
|
PHA
|
||||||
|
LDA $02FD
|
||||||
|
PHA
|
||||||
|
LDA $02FC
|
||||||
|
PHA
|
||||||
|
JSR $E000
|
||||||
|
STA $C008 ; BACK TO MAINZP
|
||||||
|
PLP
|
||||||
|
TXA
|
||||||
|
LDX ESP
|
||||||
|
STA ESTKL,X
|
||||||
|
STY ESTKH,X
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
//
|
||||||
|
// Main memory ELEMS6502 API
|
||||||
|
//
|
||||||
asm elemsOp1(op, dst)#1
|
asm elemsOp1(op, dst)#1
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
PHA
|
PHA
|
||||||
@ -117,6 +195,82 @@ asm fixupEL2
|
|||||||
STY ESTKH,X
|
STY ESTKH,X
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
|
//
|
||||||
|
// AUX memory ELEMS6502 API
|
||||||
|
//
|
||||||
|
asm xelemsOp1(op, dst)#1
|
||||||
|
LDA ESTKL+1,X
|
||||||
|
STA $02FE
|
||||||
|
LDA ESTKH+1,X
|
||||||
|
STA $02FF
|
||||||
|
LDY ESTKL,X
|
||||||
|
LDA ESTKH,X
|
||||||
|
INX
|
||||||
|
STX ESP
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
|
STA $C009 ; SELECT ALTZP
|
||||||
|
BIT $C083 ; R/W LC BANK2
|
||||||
|
BIT $C083
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
LDA $02FF
|
||||||
|
PHA
|
||||||
|
LDA $02FE
|
||||||
|
PHA
|
||||||
|
end
|
||||||
|
asm fixupXEL1
|
||||||
|
JSR $FFFF
|
||||||
|
STA $C008 ; BACK TO MAINZP
|
||||||
|
PLP
|
||||||
|
TXA
|
||||||
|
LDX ESP
|
||||||
|
STA ESTKL,X
|
||||||
|
STY ESTKH,X
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
asm xelemsOp2(op, dst)#1
|
||||||
|
LDA ESTKL+2,X
|
||||||
|
STA $02FC
|
||||||
|
LDA ESTKH+2,X
|
||||||
|
STA $02FD
|
||||||
|
LDA ESTKL+1,X
|
||||||
|
STA $02FE
|
||||||
|
LDA ESTKH+1,X
|
||||||
|
STA $02FF
|
||||||
|
LDY ESTKL,X
|
||||||
|
LDA ESTKH,X
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
STX ESP
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
|
STA $C009 ; SELECT ALTZP
|
||||||
|
BIT $C083 ; R/W LC BANK2
|
||||||
|
BIT $C083
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
LDA $02FF
|
||||||
|
PHA
|
||||||
|
LDA $02FE
|
||||||
|
PHA
|
||||||
|
LDA $02FD
|
||||||
|
PHA
|
||||||
|
LDA $02FC
|
||||||
|
PHA
|
||||||
|
end
|
||||||
|
asm fixupXEL2
|
||||||
|
JSR $FFFF
|
||||||
|
STA $C008 ; BACK TO MAINZP
|
||||||
|
PLP
|
||||||
|
TXA
|
||||||
|
LDX ESP
|
||||||
|
STA ESTKL,X
|
||||||
|
STY ESTKH,X
|
||||||
|
RTS
|
||||||
|
end
|
||||||
asm zpSave#1
|
asm zpSave#1
|
||||||
LDY #$33
|
LDY #$33
|
||||||
- LDA $00,Y
|
- LDA $00,Y
|
||||||
@ -137,10 +291,60 @@ asm fixupZPR
|
|||||||
DEY
|
DEY
|
||||||
BPL -
|
BPL -
|
||||||
end
|
end
|
||||||
asm nopZP#1
|
asm zpNop#1
|
||||||
DEX
|
DEX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
|
asm auxmove(dst, src, len)#0
|
||||||
|
LDA ESTKL+2,X
|
||||||
|
STA $02FA
|
||||||
|
LDA ESTKH+2,X
|
||||||
|
STA $02FB
|
||||||
|
LDA ESTKL+1,X
|
||||||
|
STA $02FC
|
||||||
|
LDA ESTKH+1,X
|
||||||
|
STA $02FD
|
||||||
|
LDA ESTKL,X
|
||||||
|
STA $02FE
|
||||||
|
CLC
|
||||||
|
BEQ +
|
||||||
|
SEC
|
||||||
|
+ LDA ESTKH,X
|
||||||
|
ADC #$00
|
||||||
|
STA $02FF
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
STX ESP
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
|
STA $C009 ; SELECT ALTZP
|
||||||
|
BIT $C083 ; R/W LC BANK2
|
||||||
|
BIT $C083
|
||||||
|
LDA $02FA ; DST ADDRESS
|
||||||
|
STA $42
|
||||||
|
LDA $02FB
|
||||||
|
STA $43
|
||||||
|
LDA $02FC ; SRC ADDRESS
|
||||||
|
STA $3C
|
||||||
|
LDA $02FD
|
||||||
|
STA $3D
|
||||||
|
LDY #$00
|
||||||
|
- LDA ($3C),Y
|
||||||
|
STA ($42),Y
|
||||||
|
INY
|
||||||
|
BNE +
|
||||||
|
INC $3D
|
||||||
|
INC $43
|
||||||
|
+ DEC $02FE
|
||||||
|
BNE -
|
||||||
|
DEC $02FF
|
||||||
|
BNE -
|
||||||
|
STA $C008 ; SELECT MAINZP
|
||||||
|
PLP
|
||||||
|
LDX ESP
|
||||||
|
RTS
|
||||||
|
end
|
||||||
//
|
//
|
||||||
// Utility test routines
|
// Utility test routines
|
||||||
//
|
//
|
||||||
@ -267,7 +471,13 @@ def loadcode(codefile)
|
|||||||
//putname(pcode + segname + 8); putc('='); prword(pcode); putln
|
//putname(pcode + segname + 8); putc('='); prword(pcode); putln
|
||||||
seglen = read(ref, pcode, (pcode + t_diskinfo)=>codeaddr)
|
seglen = read(ref, pcode, (pcode + t_diskinfo)=>codeaddr)
|
||||||
close(ref)
|
close(ref)
|
||||||
heaprelease(fixup(pcode, pcode + seglen - 2)) // Set heap to beginning of relocation list
|
if !fp6502 and ^MACHID & $30 == $30
|
||||||
|
seglen = fixup(AUXADDR, pcode + seglen - 2) - pcode
|
||||||
|
auxmove(AUXADDR, pcode, seglen)
|
||||||
|
pcode = AUXADDR
|
||||||
|
else
|
||||||
|
heaprelease(fixup(pcode, pcode + seglen - 2)) // Set heap to beginning of relocation list
|
||||||
|
fin
|
||||||
fin
|
fin
|
||||||
return pcode
|
return pcode
|
||||||
end
|
end
|
||||||
@ -282,10 +492,17 @@ def loadElems
|
|||||||
puts("ELEMS library not found.\n")
|
puts("ELEMS library not found.\n")
|
||||||
return 0
|
return 0
|
||||||
fin
|
fin
|
||||||
(@fixupEL1)=>1 = elems
|
if fp6502 == AUXADDR
|
||||||
(@fixupEL2)=>1 = elems
|
(@fixupXEL1)=>1 = elems
|
||||||
sane[3] = @elemsOp1
|
(@fixupXEL2)=>1 = elems
|
||||||
sane[4] = @elemsOp2
|
sane[3] = @xelemsOp1
|
||||||
|
sane[4] = @xelemsOp2
|
||||||
|
else
|
||||||
|
(@fixupEL1)=>1 = elems
|
||||||
|
(@fixupEL2)=>1 = elems
|
||||||
|
sane[3] = @elemsOp1
|
||||||
|
sane[4] = @elemsOp2
|
||||||
|
fin
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
@ -293,13 +510,13 @@ end
|
|||||||
//
|
//
|
||||||
def elemsLoad1(op, dst)#1
|
def elemsLoad1(op, dst)#1
|
||||||
if loadElems
|
if loadElems
|
||||||
return elemsOp1(op, dst)
|
return sane[3](op, dst)
|
||||||
fin
|
fin
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
def elemsLoad2(op, src, dst)#1
|
def elemsLoad2(op, src, dst)#1
|
||||||
if loadElems
|
if loadElems
|
||||||
return elemsOp2(op, src, dst)
|
return sane[4](op, src, dst)
|
||||||
fin
|
fin
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
@ -307,25 +524,37 @@ end
|
|||||||
// Load SANE library and fixup function pointers
|
// Load SANE library and fixup function pointers
|
||||||
//
|
//
|
||||||
def fpInit()
|
def fpInit()
|
||||||
|
word fpzpsave
|
||||||
|
|
||||||
fp6502 = loadcode("FP6502.CODE")
|
fp6502 = loadcode("FP6502.CODE")
|
||||||
if !fp6502
|
if !fp6502
|
||||||
puts("SANE library not found.\n")
|
puts("SANE library not found.\n")
|
||||||
return -1
|
return -1
|
||||||
fin
|
fin
|
||||||
fpzpsave = heapalloc($0033)
|
if fp6502 == AUXADDR
|
||||||
//
|
//
|
||||||
// Fixup calls in interface routines
|
// Fixup AUX calls in interface routines
|
||||||
//
|
//
|
||||||
(@fixupFP1)=>1 = fp6502
|
sane[1] = @xfpOp1
|
||||||
(@fixupFP2)=>1 = fp6502
|
sane[2] = @xfpOp2
|
||||||
(@fixupZPS)=>1 = fpzpsave
|
sane[5] = @zpNop
|
||||||
(@fixupZPR)=>1 = fpzpsave
|
sane[6] = @zpNop
|
||||||
sane[1] = @fpOp1
|
else
|
||||||
sane[2] = @fpOp2
|
//
|
||||||
|
// Fixup MAIN calls in interface routines
|
||||||
|
//
|
||||||
|
fpzpsave = heapalloc($0033)
|
||||||
|
(@fixupZPS)=>1 = fpzpsave
|
||||||
|
(@fixupZPR)=>1 = fpzpsave
|
||||||
|
(@fixupFP1)=>1 = fp6502
|
||||||
|
(@fixupFP2)=>1 = fp6502
|
||||||
|
sane[1] = @fpOp1
|
||||||
|
sane[2] = @fpOp2
|
||||||
|
sane[5] = @zpSave
|
||||||
|
sane[6] = @zpRestore
|
||||||
|
fin
|
||||||
sane[3] = @elemsLoad1
|
sane[3] = @elemsLoad1
|
||||||
sane[4] = @elemsLoad2
|
sane[4] = @elemsLoad2
|
||||||
sane[5] = @zpSave
|
|
||||||
sane[6] = @zpRestore
|
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
// Uninitialized placeholders of API
|
// Uninitialized placeholders of API
|
||||||
|
Loading…
x
Reference in New Issue
Block a user