mirror of
https://github.com/Russell-S-Harper/COMMON.git
synced 2025-06-18 09:23:31 +00:00
Cleaning up definitions, and preparing for multitasking.
This commit is contained in:
@ -47,7 +47,7 @@
|
|||||||
; CMR pq 0f pq F <- Rp <=> Rq - compare registers
|
; CMR pq 0f pq F <- Rp <=> Rq - compare registers
|
||||||
|
|
||||||
; 40 bytes in page zero for common registers
|
; 40 bytes in page zero for common registers
|
||||||
_R0 = $b8
|
_R0 = $100 - 4 * (10 + 9)
|
||||||
_R1 = _R0 + 4
|
_R1 = _R0 + 4
|
||||||
_R2 = _R1 + 4
|
_R2 = _R1 + 4
|
||||||
_R3 = _R2 + 4
|
_R3 = _R2 + 4
|
||||||
@ -58,15 +58,16 @@ _R7 = _R6 + 4
|
|||||||
_R8 = _R7 + 4
|
_R8 = _R7 + 4
|
||||||
_R9 = _R8 + 4
|
_R9 = _R8 + 4
|
||||||
|
|
||||||
; 32 bytes in page zero for internal registers
|
; 36 bytes in page zero for internal registers
|
||||||
_I0 = $e0 ; workspace
|
_I0 = _R9 + 4 ; workspace
|
||||||
_I1 = _I0 + 4
|
_I1 = _I0 + 4
|
||||||
_I2 = _I1 + 4
|
_I2 = _I1 + 4
|
||||||
_I3 = _I2 + 4
|
_I3 = _I2 + 4
|
||||||
_I4 = _I3 + 4
|
_I4 = _I3 + 4
|
||||||
_I5 = _I4 + 4
|
_I5 = _I4 + 4
|
||||||
_I6 = _I5 + 4 ; register I6 maintains common status
|
_I6 = _I5 + 4 ; register I6 maintains common status
|
||||||
_I7 = _I6 + 4 ; register I7 saves/restores processor status
|
_I7 = _I6 + 4 ; register I7 maintains process information for context switching
|
||||||
|
_I8 = _I7 + 4 ; register I8 saves/restores processor status
|
||||||
|
|
||||||
; register I6 maintains common status
|
; register I6 maintains common status
|
||||||
; (dd cc bb aa) aa: index for register stack RS / ccbb: program counter PC / dd: flags F UONPZLGE
|
; (dd cc bb aa) aa: index for register stack RS / ccbb: program counter PC / dd: flags F UONPZLGE
|
||||||
@ -86,21 +87,33 @@ _F_N = 32 ; if Rr < 0.0 (after TST)
|
|||||||
_F_O = 64 ; if overflow (after arithmetic operations)
|
_F_O = 64 ; if overflow (after arithmetic operations)
|
||||||
_F_U = 128 ; if underflow (after arithmetic operations)
|
_F_U = 128 ; if underflow (after arithmetic operations)
|
||||||
|
|
||||||
; register I7 saves/restores processor status
|
; register I7 maintains process information for context switching
|
||||||
|
_PST = _I7 ; current process status
|
||||||
|
_PSI = _PST + 1 ; process stack index to save/restore
|
||||||
|
_PD0 = _PSI + 1 ; two bytes for process
|
||||||
|
_PD1 = _PD0 + 1
|
||||||
|
|
||||||
|
; register I8 saves/restores processor status
|
||||||
; (dd cc bb aa) aa: accumulator, bb: index X, cc: index Y, dd: processor status
|
; (dd cc bb aa) aa: accumulator, bb: index X, cc: index Y, dd: processor status
|
||||||
_ACC = _I7 ; saved accumulator to restore
|
_ACC = _I8 ; saved accumulator to restore
|
||||||
_IDX = _ACC + 1 ; saved index X to restore
|
_IDX = _ACC + 1 ; saved index X to restore
|
||||||
_IDY = _IDX + 1 ; saved index Y to restore
|
_IDY = _IDX + 1 ; saved index Y to restore
|
||||||
_PS = _IDY + 1 ; saved processor status to restore
|
_PS = _IDY + 1 ; saved processor status to restore
|
||||||
|
|
||||||
; 224 bytes of page two
|
; 6502 stack resides on page one
|
||||||
|
|
||||||
|
; using some of page two for register stack
|
||||||
_RS = $200 ; register stack
|
_RS = $200 ; register stack
|
||||||
_RSS = (FN_FX - _RS) ; register stack size
|
_RSS = _R0 ; register stack size
|
||||||
|
|
||||||
; for context switching, at least _R0 to FN_FX-1 plus one byte for the stack pointer need to be saved and restored
|
; for context switching, _R0 to _RS + _RSS - 1 needs to be saved and restored
|
||||||
|
; this should comprise two pages or 512 bytes
|
||||||
|
|
||||||
; last 32 bytes of page two
|
_PR = _RS + _RSS ; running processes
|
||||||
FN_FX = $2e0 ; list of system and user functions
|
_PRS = FN_FX - _PR ; running process size
|
||||||
|
|
||||||
|
; 32 bytes of page two
|
||||||
|
FN_FX = $300 - 2 * 16 ; list of system and user functions
|
||||||
|
|
||||||
; function constants
|
; function constants
|
||||||
_ESC_C = $00
|
_ESC_C = $00
|
||||||
|
@ -2,11 +2,15 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
|
|
||||||
/* Register E maintains common status */
|
/* Register I6 maintains common status */
|
||||||
#define _RE 0xf8
|
#define _R0 0xb4
|
||||||
|
#define _R8 0xd4
|
||||||
|
#define _I0 0xdc
|
||||||
|
#define _I6 0xf4
|
||||||
|
#define _I8 0xfc
|
||||||
|
|
||||||
/* (dd cc bb aa) aa: index for register stack RS / ccbb: program counter PC / dd: flags F UONPZLGE */
|
/* (dd cc bb aa) aa: index for register stack RS / ccbb: program counter PC / dd: flags F UONPZLGE */
|
||||||
#define _RSI _RE /* register stack index */
|
#define _RSI _I6 /* register stack index */
|
||||||
#define _PCL _RSI + 1 /* program counter low */
|
#define _PCL _RSI + 1 /* program counter low */
|
||||||
#define _PCH _PCL + 1 /* program counter high */
|
#define _PCH _PCL + 1 /* program counter high */
|
||||||
#define _F _PCH + 1 /* flags */
|
#define _F _PCH + 1 /* flags */
|
||||||
@ -26,18 +30,18 @@ void hook() {
|
|||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
printf("\n%04x %u %u\n", pc, instructions, clockticks6502);
|
printf("\n%04x %u %u\n", pc, instructions, clockticks6502);
|
||||||
for (i = 0x00b8; i < 0x00d8; i += 4) {
|
for (i = _R0; i < _R8; i += 4) {
|
||||||
printf("R%d: ", (i - 0x00b8) / 4);
|
printf("R%d: ", (i - _R0) / 4);
|
||||||
for (j = 0; j < 4; ++j)
|
for (j = 0; j < 4; ++j)
|
||||||
printf("%02x ", memory[i + j]);
|
printf("%02x ", memory[i + j]);
|
||||||
if (((i - 0x00b8) / 4) % 4 == 3)
|
if (((i - _R0) / 4) % 4 == 3)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
for (i = 0x00e0; i < 0x0100; i += 4) {
|
for (i = _I0; i < _I8; i += 4) {
|
||||||
printf("I%d: ", (i - 0x00e0) / 4);
|
printf("I%d: ", (i - _I0) / 4);
|
||||||
for (j = 0; j < 4; ++j)
|
for (j = 0; j < 4; ++j)
|
||||||
printf("%02x ", memory[i + j]);
|
printf("%02x ", memory[i + j]);
|
||||||
if (((i - 0x00e0) / 4) % 4 == 3)
|
if (((i - _I0) / 4) % 4 == 3)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user