more work towards Mega65 screen support
This commit is contained in:
1 parent
83cdf37c0d
commit
52e2060026
11 files changed
+221
-24
No files matched your search
@@ -268,6 +268,85 @@
|
||||
}
|
||||
|
||||
|
||||
// Others, taken from https://github.com/smnjameson/M65_KickAsm_PseudoCommands
|
||||
|
||||
.const z = -999 // allows (base page),z addressing mode
|
||||
.const sy = -998 // allows (base page, s),y addressing mode
|
||||
.const AT_IZEROPAGEZ = 13 // adds a pseudo addressing mode
|
||||
.const AT_INDIRECTX = -5 // adds a pseudo addressing mode
|
||||
|
||||
.function GetAdressingModeType(arg) {
|
||||
.if(arg == AT_NONE) .return "AT_NONE"
|
||||
.if(arg == AT_IMMEDIATE) .return "AT_IMMEDIATE"
|
||||
.if(arg == AT_INDIRECT) .return "AT_INDIRECT"
|
||||
.if(arg == AT_INDIRECTX) .return "AT_INDIRECTX"
|
||||
.if(arg == AT_ABSOLUTE) .return "AT_ABSOLUTE"
|
||||
.if(arg == AT_ABSOLUTEX) .return "AT_ABSOLUTEX"
|
||||
.if(arg == AT_ABSOLUTEY) .return "AT_ABSOLUTEY"
|
||||
.if(arg == AT_IZEROPAGEX) .return "AT_IZEROPAGEX"
|
||||
.if(arg == AT_IZEROPAGEY) .return "AT_IZEROPAGEY"
|
||||
.if(arg == AT_IZEROPAGEZ) .return "AT_IZEROPAGEZ"
|
||||
.return arg
|
||||
}
|
||||
|
||||
.pseudocommand cpz arg {
|
||||
.var value = arg.getValue()
|
||||
.var type = arg.getType()
|
||||
.if(type == AT_IMMEDIATE) {
|
||||
.byte $C2, value
|
||||
} else .if(type == AT_ABSOLUTE) {
|
||||
.if(value <= $FF ) {
|
||||
.byte $D4, value
|
||||
} else {
|
||||
.byte $DC, <value, >value
|
||||
}
|
||||
} else {
|
||||
.error "Invalid adressingmode. 'cpz' doesn't support "+GetAdressingModeType(type)+" mode"
|
||||
}
|
||||
}
|
||||
|
||||
.pseudocommand lda arg {
|
||||
.var value = arg.getValue()
|
||||
.var type = arg.getType()
|
||||
.if(type != AT_IZEROPAGEZ) .error "':lda' only accepts AT_IZEROPAGEZ"
|
||||
.if(value > $FF ) .error "':lda ($nn),z' requires zeropage address"
|
||||
.byte $B2, value
|
||||
}
|
||||
|
||||
.pseudocommand ldz arg
|
||||
{
|
||||
.var value = arg.getValue()
|
||||
.var type = arg.getType()
|
||||
.if(type == AT_IMMEDIATE) {
|
||||
.byte $A3, value
|
||||
} else .if(type == AT_ABSOLUTE) {
|
||||
.byte $AB, <value, >value
|
||||
} else .if(type == AT_ABSOLUTEX) {
|
||||
.byte $BB, <value, >value
|
||||
} else {
|
||||
.error "Invalid adressingmode. 'ldz' doesn't support "+GetAdressingModeType(type)+" mode"
|
||||
}
|
||||
}
|
||||
|
||||
.pseudocommand sta arg {
|
||||
.var value = arg.getValue()
|
||||
.var type = arg.getType()
|
||||
.if(type != AT_IZEROPAGEZ) .error "':sta' only accepts AT_IZEROPAGEZ"
|
||||
.if(value > $FF ) .error "':sta ($nn),z' requires zeropage address"
|
||||
.byte $92, value
|
||||
}
|
||||
|
||||
// Flat memory access support
|
||||
|
||||
.pseudocommand sta_lp arg {
|
||||
.var value = arg.getValue()
|
||||
.var type = arg.getType()
|
||||
.if(type != AT_IZEROPAGEZ) .error "'sta_lp' only accepts AT_IZEROPAGEZ"
|
||||
.if(value > $FF ) .error "'sta_lp' requires zeropage address"
|
||||
nop
|
||||
.byte $92, value
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
// Page 0 - reused LDTB1
|
||||
//
|
||||
|
||||
// $D9 -- UNUSED --
|
||||
.label M65_TMP__K1 = $D9 // $D9 -- UNUSED -- temporary value for various Kernal routines
|
||||
.label M65_LPNT_BAS1 = $DA // $DA-$DD 4-byte pointer for temporary usage within BASIC
|
||||
.label M65_LPNT_BAS2 = $DE // $DE-$E1 4-byte pointer for temporary usage within BASIC
|
||||
.label M65_LPNT_SCR = $E2 // $E2-$E5 4-byte pointer for temporary usage within BASIC and screen editor
|
||||
@@ -18,7 +18,7 @@
|
||||
.label M65_MAGICSTR = $E7 // $E7-$E9 if equals 'M65' it means we are in native mode
|
||||
.label M65_LPNT_IRQ = $EA // $EA-$ED 4-byte pointer for temporary usage within interrupts
|
||||
.label M65_LPNT_KERN = $EE // $EE-$F1 4-byte pointer for temporary usage by KERNAL
|
||||
// $F2 -- UNUSED --
|
||||
.label M65_TMP__K2 = $F2 // $F2 -- UNUSED -- temporary value for various Kernal routines
|
||||
|
||||
//
|
||||
// Pages 4-7 - reused screen memory
|
||||
@@ -30,9 +30,13 @@
|
||||
|
||||
// $580-$5FF - reserved for KERNAL
|
||||
|
||||
.label M65_SCRMODE = $580 // 0 = 40x25, 1 = 80x25, 2 = 80x50, (-- NOT IMPLEMENTED -- add $80 for graphics modes)
|
||||
.label M65_SCRTXTBASE = $581 // $581-$584 base address of the screen memory for text modes
|
||||
.label M65_SCRGFXBASE = $585 // $585-$588 -- NOT IMPLEMENTED -- base address of the screen memory for graphics modes
|
||||
// $589-$5FF -- UNUSED --
|
||||
.label M65_SCRTXTBASE = $580 // $580-$583 base address of the screen memory for text modes
|
||||
.label M65_SCRGFXBASE = $584 // $584-$587 -- NOT IMPLEMENTED -- base address of the screen memory for graphics modes
|
||||
.label M65_SCRMODE = $588 // 0 = 40x25, 1 = 80x25, 2 = 80x50, (-- NOT IMPLEMENTED -- add $80 for graphics modes)
|
||||
.label M65_TXTWIN_X0 = $589 // text window - top-left X coordinate, starting from 0
|
||||
.label M65_TXTWIN_Y0 = $58A // text window - top-left Y coordinate, starting from 0
|
||||
.label M65_TXTWIN_X1 = $58B // text window - bottom-right X coordinate + 1
|
||||
.label M65_TXTWIN_Y1 = $58C // text window - bottom-right Y coordinate + 1
|
||||
// $58D-$5FF -- UNUSED --
|
||||
.label M65_RS232_INBUF = $600 // $600-$6FF -- reserved for RS-232 input buffer --
|
||||
.label M65_RS232_OUTBUF = $700 // $700-$7FF -- reserved for RS-232 output buffer --
|
||||
Reference in new issue
Block a user