From 6f9fa94739a79b16fa119edfd2a2b5a8c1d90b30 Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Tue, 29 Aug 2017 08:07:02 -0700 Subject: [PATCH] Split out include files for ProDOS, AuxMem and A2D --- desk.acc/show.text.file/a2d.inc | 23 ++++ desk.acc/show.text.file/auxmem.inc | 15 +++ desk.acc/show.text.file/prodos.inc | 43 ++++++++ desk.acc/show.text.file/stf.list | 162 ++++++++++++++++------------- desk.acc/show.text.file/stf.o | Bin 18466 -> 18421 bytes desk.acc/show.text.file/stf.s | 78 +------------- 6 files changed, 173 insertions(+), 148 deletions(-) create mode 100644 desk.acc/show.text.file/a2d.inc create mode 100644 desk.acc/show.text.file/auxmem.inc create mode 100644 desk.acc/show.text.file/prodos.inc diff --git a/desk.acc/show.text.file/a2d.inc b/desk.acc/show.text.file/a2d.inc new file mode 100644 index 0000000..e5fd202 --- /dev/null +++ b/desk.acc/show.text.file/a2d.inc @@ -0,0 +1,23 @@ +;;; ------------------------------ +;;; A2Desktop +;;; ------------------------------ + +;;; Entry Points +A2D := $4000 +UNKNOWN_CALL := $8E00 + +A2D_TEXT := $19 + +;;; Macros +.macro A2D_CALL op, addr + jsr A2D + .byte op + .addr addr +.endmacro + +.macro A2D_DEFSTRING str ; String definition, for use with A2D_TEXT + .local data + .addr data + .byte .strlen(str) +data: .byte str +.endmacro diff --git a/desk.acc/show.text.file/auxmem.inc b/desk.acc/show.text.file/auxmem.inc new file mode 100644 index 0000000..db4dd23 --- /dev/null +++ b/desk.acc/show.text.file/auxmem.inc @@ -0,0 +1,15 @@ +;;; ------------------------------ +;;; Aux Memory +;;; ------------------------------ + +;;; Softswitches +RAMRDOFF := $C002 +RAMRDON := $C003 +RAMWRTOFF := $C004 +RAMWRTON := $C005 +ALTZPOFF := $C008 +ALTZPON := $C009 +LCBANK1 := $C08B + +;;; Routines +AUXMOVE := $C311 diff --git a/desk.acc/show.text.file/prodos.inc b/desk.acc/show.text.file/prodos.inc new file mode 100644 index 0000000..59bd3e3 --- /dev/null +++ b/desk.acc/show.text.file/prodos.inc @@ -0,0 +1,43 @@ +;;; ------------------------------ +;;; ProDOS MLI +;;; ------------------------------ + +;;; Entry point +MLI := $BF00 + +;;; Housekeeping Calls +CREATE := $C0 +DESTROY := $C1 +RENAME := $C2 +SET_FILE_INFO := $C3 +GET_FILE_INFO := $C4 +ON_LINE := $C5 +SET_PREFIX := $C6 +GET_PREFIX := $C7 +;;; Filing Calls +OPEN := $C8 +NEWLINE := $C9 +READ := $CA +WRITE := $CB +CLOSE := $CC +FLUSH := $CD +SET_MARK := $CE +GET_MARK := $CF +SET_EOF := $D0 +GET_EOF := $D1 +SET_BUF := $D2 +GET_BUF := $D3 +;;; System Calls +GET_TIME := $82 +ALLOC_INTERRUPT := $40 +DEALLOC_INTERRUPT := $41 +;;; Direct Disk Access Commands +READ_BLOCK := $80 +WRITE_BLOCK := $71 + +;;; Macros +.macro MLI_CALL op, addr + jsr MLI + .byte op + .addr addr +.endmacro diff --git a/desk.acc/show.text.file/stf.list b/desk.acc/show.text.file/stf.list index 3cf9032..09d26e4 100644 --- a/desk.acc/show.text.file/stf.list +++ b/desk.acc/show.text.file/stf.list @@ -5,87 +5,101 @@ Current file: stf.s 000000r 1 .setcpu "65C02" 000000r 1 .org $800 000800 1 +000800 1 .include "prodos.inc" +000800 2 ;;; ------------------------------ +000800 2 ;;; ProDOS MLI +000800 2 ;;; ------------------------------ +000800 2 +000800 2 ;;; Entry point +000800 2 MLI := $BF00 +000800 2 +000800 2 ;;; Housekeeping Calls +000800 2 CREATE := $C0 +000800 2 DESTROY := $C1 +000800 2 RENAME := $C2 +000800 2 SET_FILE_INFO := $C3 +000800 2 GET_FILE_INFO := $C4 +000800 2 ON_LINE := $C5 +000800 2 SET_PREFIX := $C6 +000800 2 GET_PREFIX := $C7 +000800 2 ;;; Filing Calls +000800 2 OPEN := $C8 +000800 2 NEWLINE := $C9 +000800 2 READ := $CA +000800 2 WRITE := $CB +000800 2 CLOSE := $CC +000800 2 FLUSH := $CD +000800 2 SET_MARK := $CE +000800 2 GET_MARK := $CF +000800 2 SET_EOF := $D0 +000800 2 GET_EOF := $D1 +000800 2 SET_BUF := $D2 +000800 2 GET_BUF := $D3 +000800 2 ;;; System Calls +000800 2 GET_TIME := $82 +000800 2 ALLOC_INTERRUPT := $40 +000800 2 DEALLOC_INTERRUPT := $41 +000800 2 ;;; Direct Disk Access Commands +000800 2 READ_BLOCK := $80 +000800 2 WRITE_BLOCK := $71 +000800 2 +000800 2 ;;; Macros +000800 2 .macro MLI_CALL op, addr +000800 2 jsr MLI +000800 2 .byte op +000800 2 .addr addr +000800 2 .endmacro +000800 2 +000800 1 .include "auxmem.inc" +000800 2 ;;; ------------------------------ +000800 2 ;;; Aux Memory +000800 2 ;;; ------------------------------ +000800 2 +000800 2 ;;; Softswitches +000800 2 RAMRDOFF := $C002 +000800 2 RAMRDON := $C003 +000800 2 RAMWRTOFF := $C004 +000800 2 RAMWRTON := $C005 +000800 2 ALTZPOFF := $C008 +000800 2 ALTZPON := $C009 +000800 2 LCBANK1 := $C08B +000800 2 +000800 2 ;;; Routines +000800 2 AUXMOVE := $C311 +000800 2 +000800 1 .include "a2d.inc" +000800 2 ;;; ------------------------------ +000800 2 ;;; A2Desktop +000800 2 ;;; ------------------------------ +000800 2 +000800 2 ;;; Entry Points +000800 2 A2D := $4000 +000800 2 UNKNOWN_CALL := $8E00 +000800 2 +000800 2 A2D_TEXT := $19 +000800 2 +000800 2 ;;; Macros +000800 2 .macro A2D_CALL op, addr +000800 2 jsr A2D +000800 2 .byte op +000800 2 .addr addr +000800 2 .endmacro +000800 2 +000800 2 .macro A2D_DEFSTRING str ; String definition, for use with A2D_TEXT +000800 2 .local data +000800 2 .addr data +000800 2 .byte .strlen(str) +000800 2 data: .byte str +000800 2 .endmacro +000800 2 +000800 1 000800 1 NULL := 0 000800 1 000800 1 ;;; TODO: Figure this one out 000800 1 L0020 := $0020 000800 1 -000800 1 ;;; ------------------------------ -000800 1 ;;; Aux Memory 000800 1 -000800 1 ;;; Softswitches -000800 1 RAMRDOFF := $C002 -000800 1 RAMRDON := $C003 -000800 1 RAMWRTOFF := $C004 -000800 1 RAMWRTON := $C005 -000800 1 ALTZPOFF := $C008 -000800 1 ALTZPON := $C009 -000800 1 LCBANK1 := $C08B 000800 1 -000800 1 ;;; Routines -000800 1 AUXMOVE := $C311 -000800 1 -000800 1 ;;; ------------------------------ -000800 1 ;;; ProDOS MLI -000800 1 MLI := $BF00 -000800 1 -000800 1 ;;; Housekeeping Calls -000800 1 CREATE := $C0 -000800 1 DESTROY := $C1 -000800 1 RENAME := $C2 -000800 1 SET_FILE_INFO := $C3 -000800 1 GET_FILE_INFO := $C4 -000800 1 ON_LINE := $C5 -000800 1 SET_PREFIX := $C6 -000800 1 GET_PREFIX := $C7 -000800 1 ;;; Filing Calls -000800 1 OPEN := $C8 -000800 1 NEWLINE := $C9 -000800 1 READ := $CA -000800 1 WRITE := $CB -000800 1 CLOSE := $CC -000800 1 FLUSH := $CD -000800 1 SET_MARK := $CE -000800 1 GET_MARK := $CF -000800 1 SET_EOF := $D0 -000800 1 GET_EOF := $D1 -000800 1 SET_BUF := $D2 -000800 1 GET_BUF := $D3 -000800 1 ;;; System Calls -000800 1 GET_TIME := $82 -000800 1 ALLOC_INTERRUPT := $40 -000800 1 DEALLOC_INTERRUPT := $41 -000800 1 ;;; Direct Disk Access Commands -000800 1 READ_BLOCK := $80 -000800 1 WRITE_BLOCK := $71 -000800 1 -000800 1 ;;; Macros -000800 1 .macro MLI_CALL op, addr -000800 1 jsr MLI -000800 1 .byte op -000800 1 .addr addr -000800 1 .endmacro -000800 1 -000800 1 ;;; ------------------------------ -000800 1 ;;; A2Desktop Entry Points -000800 1 A2D := $4000 -000800 1 UNKNOWN_CALL := $8E00 -000800 1 -000800 1 A2D_TEXT := $19 -000800 1 -000800 1 ;;; Macros -000800 1 .macro A2D_CALL op, addr -000800 1 jsr A2D -000800 1 .byte op -000800 1 .addr addr -000800 1 .endmacro -000800 1 -000800 1 .macro A2D_DEFSTRING str ; String definition, for use with A2D_TEXT -000800 1 .local data -000800 1 .addr data -000800 1 .byte .strlen(str) -000800 1 data: .byte str -000800 1 .endmacro 000800 1 000800 1 000800 1 4C 04 08 start: jmp copy2aux diff --git a/desk.acc/show.text.file/stf.o b/desk.acc/show.text.file/stf.o index e4e7ea0c9231308de1eecc6822d069efe1ebeb3b..da68d2004f410a80017f971b7bfacebcf273bad8 100644 GIT binary patch literal 18421 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