mirror of https://github.com/stid/woz64.git
Play with pseudo (mimic 65c02)
This commit is contained in:
parent
c8ba619d33
commit
440d3caa67
|
@ -5,6 +5,7 @@
|
||||||
#import "../libs/print.asm"
|
#import "../libs/print.asm"
|
||||||
#import "../core/keyboard.asm"
|
#import "../core/keyboard.asm"
|
||||||
#import "../core/screen.asm"
|
#import "../core/screen.asm"
|
||||||
|
#import "../core/pseudo.asm"
|
||||||
#import "../libs/module.asm"
|
#import "../libs/module.asm"
|
||||||
#import "../progs/woz_shell.asm"
|
#import "../progs/woz_shell.asm"
|
||||||
|
|
||||||
|
@ -23,13 +24,14 @@
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
init: {
|
init: {
|
||||||
// Init All Modules
|
// Init All Modules
|
||||||
|
jsr Pseudo.init
|
||||||
|
jsr Module.init
|
||||||
jsr Memory.init
|
jsr Memory.init
|
||||||
jsr Math.init
|
jsr Math.init
|
||||||
jsr Print.init
|
jsr Print.init
|
||||||
jsr Keyboard.init
|
jsr Keyboard.init
|
||||||
jsr Screen.init
|
jsr Screen.init
|
||||||
jsr WozShell.init
|
jsr WozShell.init
|
||||||
jsr Module.init
|
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +44,7 @@ toDebug: {
|
||||||
ModuleToDebug(module_type, module_name, version)
|
ModuleToDebug(module_type, module_name, version)
|
||||||
jsr Keyboard.toDebug
|
jsr Keyboard.toDebug
|
||||||
jsr Screen.toDebug
|
jsr Screen.toDebug
|
||||||
|
jsr Pseudo.toDebug
|
||||||
jsr Module.toDebug
|
jsr Module.toDebug
|
||||||
jsr Memory.toDebug
|
jsr Memory.toDebug
|
||||||
jsr Print.toDebug
|
jsr Print.toDebug
|
||||||
|
|
|
@ -1,17 +1,25 @@
|
||||||
.filenamespace MemMap
|
.filenamespace MemMap
|
||||||
#importonce
|
#importonce
|
||||||
|
|
||||||
|
.const SHELL_BUGGER_ADDR = $3000
|
||||||
|
.const XSTACK_ADDRESS = $3100
|
||||||
|
.const YSTACK_ADDRESS = $3200
|
||||||
|
|
||||||
*=$2 "ZERO PAGE" virtual
|
*=$2 "ZERO PAGE" virtual
|
||||||
|
|
||||||
|
.namespace CORE {
|
||||||
|
yStackOffset: .byte 0
|
||||||
|
xStackOffset: .byte 0
|
||||||
|
|
||||||
|
.label XStack = XSTACK_ADDRESS // 256 bytes
|
||||||
|
.label YStack = YSTACK_ADDRESS // 256 bytes
|
||||||
|
}
|
||||||
|
|
||||||
.namespace SCREEN {
|
.namespace SCREEN {
|
||||||
TempVideoPointer: .word 0
|
TempVideoPointer: .word 0
|
||||||
TempStringPointer: .word 0
|
TempStringPointer: .word 0
|
||||||
CursorCol: .byte 0
|
CursorCol: .byte 0
|
||||||
CursorRow: .byte 0
|
CursorRow: .byte 0
|
||||||
tempY: .byte 0
|
|
||||||
tempX: .byte 0
|
|
||||||
PrintPetCharY: .byte 0
|
|
||||||
PrintPetCharX: .byte 0
|
|
||||||
ScrollUpTriggered: .byte 0
|
ScrollUpTriggered: .byte 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,15 +46,12 @@
|
||||||
from: .word 0
|
from: .word 0
|
||||||
dest: .word 0
|
dest: .word 0
|
||||||
size: .word 0
|
size: .word 0
|
||||||
tmpX: .byte 0
|
|
||||||
tmpY: .byte 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.namespace MODULE {
|
.namespace MODULE {
|
||||||
versionPtr: .word 0
|
versionPtr: .word 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.namespace SHELL {
|
.namespace SHELL {
|
||||||
pos: .byte 0
|
pos: .byte 0
|
||||||
MODE: .byte 0
|
MODE: .byte 0
|
||||||
|
@ -58,6 +63,8 @@
|
||||||
XAML: .byte 0
|
XAML: .byte 0
|
||||||
XAMH: .byte 0
|
XAMH: .byte 0
|
||||||
|
|
||||||
.label buffer = $3000 // 256 bytes
|
.label buffer = SHELL_BUGGER_ADDR // 256 bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
#importonce
|
||||||
|
#import "../core/mem_map.asm"
|
||||||
|
#import "../libs/module.asm"
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// ////// PSEUDO COMMANDS /////////////////////////////////
|
||||||
|
// ========================================================
|
||||||
|
|
||||||
|
.pseudocommand phy {
|
||||||
|
jsr Pseudo._phy
|
||||||
|
}
|
||||||
|
|
||||||
|
.pseudocommand ply {
|
||||||
|
jsr Pseudo._ply
|
||||||
|
}
|
||||||
|
|
||||||
|
.pseudocommand phx {
|
||||||
|
jsr Pseudo._phx
|
||||||
|
}
|
||||||
|
|
||||||
|
.pseudocommand plx {
|
||||||
|
jsr Pseudo._plx
|
||||||
|
}
|
||||||
|
|
||||||
|
.pseudocommand phr {
|
||||||
|
pha
|
||||||
|
phx
|
||||||
|
phy
|
||||||
|
}
|
||||||
|
|
||||||
|
.pseudocommand plr {
|
||||||
|
plx
|
||||||
|
ply
|
||||||
|
pla
|
||||||
|
}
|
||||||
|
|
||||||
|
.filenamespace Pseudo
|
||||||
|
// ========================================================
|
||||||
|
// ////// METHODS /////////////////////////////////////////
|
||||||
|
// ========================================================
|
||||||
|
|
||||||
|
* = * "Pseudo Commands"
|
||||||
|
|
||||||
|
// --------------------------------------------------------
|
||||||
|
// init -
|
||||||
|
// Module Init.
|
||||||
|
// --------------------------------------------------------
|
||||||
|
init: {
|
||||||
|
lda #$00
|
||||||
|
sta MemMap.CORE.xStackOffset
|
||||||
|
sta MemMap.CORE.yStackOffset
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------
|
||||||
|
// toDebug -
|
||||||
|
// Print debug info.
|
||||||
|
// --------------------------------------------------------
|
||||||
|
toDebug: {
|
||||||
|
ModuleToDebug(module_type, module_name, version)
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
_phx: {
|
||||||
|
pha // Save A
|
||||||
|
tya // Tansfer Y in A
|
||||||
|
pha // Save Y as A
|
||||||
|
inc MemMap.CORE.xStackOffset // Increment Stack offset
|
||||||
|
ldy MemMap.CORE.xStackOffset // Load new Stack offset in Y
|
||||||
|
txa // Move X in A
|
||||||
|
sta MemMap.CORE.XStack, y // Save X (as A) in YStack + offset (y)
|
||||||
|
pla // Load saved A (was Y)
|
||||||
|
tay // restore Y from A
|
||||||
|
pla // restore A
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
_plx: {
|
||||||
|
pha // Save A
|
||||||
|
tya // Tansfer X in A
|
||||||
|
pha // Save X as A
|
||||||
|
ldx MemMap.CORE.xStackOffset // Load Stack offset
|
||||||
|
lda MemMap.CORE.XStack, x // Load Y from stack
|
||||||
|
tax
|
||||||
|
dec MemMap.CORE.xStackOffset // Dcrement stack offset
|
||||||
|
pla // Load saved A (was X)
|
||||||
|
tay // restore X from A
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
_phy: {
|
||||||
|
pha // Save A
|
||||||
|
txa // Tansfer X in A
|
||||||
|
pha // Save X as A
|
||||||
|
inc MemMap.CORE.yStackOffset // Increment Stack offset
|
||||||
|
ldx MemMap.CORE.yStackOffset // Load new Stack offset in X
|
||||||
|
tya // Move Y in A
|
||||||
|
sta MemMap.CORE.YStack, x // Save Y (as A) in XStack + offset (x)
|
||||||
|
pla // Load saved A (was X)
|
||||||
|
tax // restore X from A
|
||||||
|
pla // restore A
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
_ply: {
|
||||||
|
pha // Save A
|
||||||
|
txa // Tansfer X in A
|
||||||
|
pha // Save X as A
|
||||||
|
ldx MemMap.CORE.yStackOffset // Load Stack offset
|
||||||
|
ldy MemMap.CORE.YStack, x // Load Y from stack
|
||||||
|
dec MemMap.CORE.yStackOffset // Dcrement stack offset
|
||||||
|
pla // Load saved A (was X)
|
||||||
|
tax // restore X from A
|
||||||
|
pla // restore A
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// ////// DATA ////////////////////////////////////////////
|
||||||
|
// ========================================================
|
||||||
|
|
||||||
|
* = * "Pseudo Data"
|
||||||
|
module_type: .byte Module.TYPES.CORE
|
||||||
|
version: .byte 1, 0, 0
|
||||||
|
|
||||||
|
.encoding "screencode_mixed"
|
||||||
|
module_name:
|
||||||
|
.text "pseudo"
|
||||||
|
.byte 0
|
|
@ -2,6 +2,7 @@
|
||||||
#import "../libs/math.asm"
|
#import "../libs/math.asm"
|
||||||
#import "../libs/memory.asm"
|
#import "../libs/memory.asm"
|
||||||
#import "../libs/module.asm"
|
#import "../libs/module.asm"
|
||||||
|
#import "../core/pseudo.asm"
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
@ -184,7 +185,7 @@ scrollUp: {
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
sendChar: {
|
sendChar: {
|
||||||
sei
|
sei
|
||||||
stx MemMap.SCREEN.tempX
|
phx
|
||||||
cmp #CR
|
cmp #CR
|
||||||
bne.r !+
|
bne.r !+
|
||||||
jsr screenNewLine
|
jsr screenNewLine
|
||||||
|
@ -205,7 +206,7 @@ sendChar: {
|
||||||
stx MemMap.SCREEN.TempVideoPointer+1
|
stx MemMap.SCREEN.TempVideoPointer+1
|
||||||
|
|
||||||
// Temp Save Y
|
// Temp Save Y
|
||||||
sty MemMap.SCREEN.tempY
|
phy
|
||||||
|
|
||||||
// CursorRow * 40
|
// CursorRow * 40
|
||||||
ldy MemMap.SCREEN.CursorRow
|
ldy MemMap.SCREEN.CursorRow
|
||||||
|
@ -256,12 +257,12 @@ sendChar: {
|
||||||
!:
|
!:
|
||||||
// insert into screen
|
// insert into screen
|
||||||
sta (MemMap.SCREEN.TempVideoPointer), y
|
sta (MemMap.SCREEN.TempVideoPointer), y
|
||||||
ldy MemMap.SCREEN.tempY
|
ply
|
||||||
iny
|
iny
|
||||||
inc MemMap.SCREEN.CursorCol
|
inc MemMap.SCREEN.CursorCol
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
ldx MemMap.SCREEN.tempX
|
plx
|
||||||
cli
|
cli
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#importonce
|
#importonce
|
||||||
#import "../libs/module.asm"
|
#import "../libs/module.asm"
|
||||||
#import "../libs/module.asm"
|
#import "../libs/module.asm"
|
||||||
|
#import "../core/pseudo.asm"
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
@ -123,8 +124,7 @@ toDebug: {
|
||||||
// copy
|
// copy
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
clone: {
|
clone: {
|
||||||
stx MemMap.MEMORY.tmpX
|
phr
|
||||||
sty MemMap.MEMORY.tmpY
|
|
||||||
sei
|
sei
|
||||||
ldy #0
|
ldy #0
|
||||||
ldx MemMap.MEMORY.size
|
ldx MemMap.MEMORY.size
|
||||||
|
@ -146,8 +146,7 @@ clone: {
|
||||||
bne md3
|
bne md3
|
||||||
cli
|
cli
|
||||||
md4:
|
md4:
|
||||||
ldx MemMap.MEMORY.tmpX
|
plr
|
||||||
ldy MemMap.MEMORY.tmpY
|
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,8 +162,7 @@ clone: {
|
||||||
// A = The byte to fill memory with
|
// A = The byte to fill memory with
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
fill: {
|
fill: {
|
||||||
stx MemMap.MEMORY.tmpX
|
phr
|
||||||
sty MemMap.MEMORY.tmpY
|
|
||||||
sei
|
sei
|
||||||
ldy #0
|
ldy #0
|
||||||
ldx MemMap.MEMORY.size
|
ldx MemMap.MEMORY.size
|
||||||
|
@ -185,8 +183,7 @@ fill: {
|
||||||
bne md3
|
bne md3
|
||||||
cli
|
cli
|
||||||
md4:
|
md4:
|
||||||
ldx MemMap.MEMORY.tmpX
|
plr
|
||||||
ldy MemMap.MEMORY.tmpY
|
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,14 +58,10 @@ toDebug: {
|
||||||
// A = PET ASCII char to print
|
// A = PET ASCII char to print
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
printPetChar: {
|
printPetChar: {
|
||||||
pha
|
phr
|
||||||
stx MemMap.SCREEN.PrintPetCharX
|
|
||||||
sty MemMap.SCREEN.PrintPetCharY
|
|
||||||
jsr Print.petCharToScreenChar
|
jsr Print.petCharToScreenChar
|
||||||
jsr Screen.sendChar
|
jsr Screen.sendChar
|
||||||
ldy MemMap.SCREEN.PrintPetCharY
|
plr
|
||||||
ldx MemMap.SCREEN.PrintPetCharX
|
|
||||||
pla
|
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
main.asm
1
main.asm
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
* = $8000 "Main"
|
* = $8000 "Main"
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
.const MAIN_COLOR = $03
|
.const MAIN_COLOR = $03
|
||||||
.const BORDER_COLOR = $05
|
.const BORDER_COLOR = $05
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#import "../libs/print.asm"
|
#import "../libs/print.asm"
|
||||||
#import "../libs/module.asm"
|
#import "../libs/module.asm"
|
||||||
#import "../core/init.asm"
|
#import "../core/init.asm"
|
||||||
|
#import "../core/pseudo.asm"
|
||||||
|
|
||||||
.filenamespace WozShell
|
.filenamespace WozShell
|
||||||
|
|
||||||
|
@ -11,8 +12,8 @@
|
||||||
// ////// CONSTANTS ///////////////////////////////////////
|
// ////// CONSTANTS ///////////////////////////////////////
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
|
||||||
.const CR = $0d
|
.const CR = $0d
|
||||||
.const R = $52
|
.const R = $52
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
@ -190,7 +191,8 @@ wozExec: {
|
||||||
// We're in XAM mode now
|
// We're in XAM mode now
|
||||||
|
|
||||||
ldx #2 // Copy 2 bytes
|
ldx #2 // Copy 2 bytes
|
||||||
SETADR: lda MemMap.SHELL.L-1,X // Copy hex data to
|
SETADR:
|
||||||
|
lda MemMap.SHELL.L-1,X // Copy hex data to
|
||||||
sta MemMap.SHELL.STL-1,X // 'store index'
|
sta MemMap.SHELL.STL-1,X // 'store index'
|
||||||
sta MemMap.SHELL.XAML-1,X // and to 'XAM index'
|
sta MemMap.SHELL.XAML-1,X // and to 'XAM index'
|
||||||
dex // Next of 2 bytes
|
dex // Next of 2 bytes
|
||||||
|
|
Loading…
Reference in New Issue