mirror of
https://github.com/fadden/6502bench.git
synced 2024-08-20 11:28:58 +00:00
328 lines
13 KiB
Plaintext
328 lines
13 KiB
Plaintext
; 2021 didierv from dmaconcept / CEO Member.
|
||
;
|
||
; Sources:
|
||
; Various Oric reference materials found online
|
||
; Reference to Oric Atmos Rom 1.1
|
||
; Oric a nu from Fabrice Broche
|
||
; Oric Advanced User Guide from Leycester Whewell
|
||
; The Rom disassembly
|
||
|
||
*SYNOPSIS Oric Atmos model.
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Zero page
|
||
|
||
BASIC_BUF @ $35
|
||
CHARGOT @ $E8
|
||
TXTPTR @ $E9
|
||
|
||
PTRSCR @ $0C ; Indirect pointer for screen and Hex number construction area
|
||
PTRSCR_H @ $0D
|
||
PTRSCR2 @ $0E ; Indirect pointer for the screen.
|
||
PTRSCR2_H @ $0F
|
||
PTRHRS @ $10 ; Address of hires cursor.
|
||
PTRHRS_H @ $11
|
||
PTRTXT @ $12 ; Address of text cursor.
|
||
PTRTXT_H @ $13
|
||
WORKSPACE @ $14 ; Expression workspace.
|
||
FLG_CTRL_C @ $17 ; Set to 1 if ‘CTRL C’ pressed, otherwise 0.
|
||
PTRTOKEN @ $18 ; Tokenising pointer.
|
||
PTRTOKEN_H @ $19
|
||
PRT_READY @ $1A ; Jump location to print 'Ready'. ($CBEB)
|
||
PTR_DOKE @ $1D ; Pointer for Doke
|
||
ADR_CURSOR @ $1F ; Temp Calculation of cursor address.
|
||
PTR_USR @ $21 ; Jump location for USR command.
|
||
WK_EXPRESS @ $24 ; Expression workspace.
|
||
TMP_STORAGE @ $27 ; Temporary storage — often for characters being printed.
|
||
FLG_STRING @ $28 ; Set to #FF if dealing with strings.
|
||
FLG_INTEGER @ $29 ; Bit 7 is set if using integer variable.
|
||
FLG_DATA @ $2A ; Garbage collection flag or flag for skipping through DATA statements.
|
||
FLG_INTEGER2 @ $2B ; Bit 7 when set inhibits the use of integers. Bit 6 when set indicates STORE or RECALL commands in use.
|
||
FLG_REDO @ $2C ; Zero if REDOing input FROM START.
|
||
|
||
; $2D Temporary storage for expression evaluator.
|
||
; $2E CTRL O flag. 0 if output to screen enabled.
|
||
; $2F Next byte to/from cassette.
|
||
; $30 Cursor position for Basic printout.
|
||
; $31 ; Screen line width +13
|
||
; $32 8 - multiple line width.
|
||
; $33,$34 Integer values to/from main floating point accumulator.
|
||
; $35-$84 Input buffer. (79 bytes)
|
||
; $35-$48 Name of program required for CLOAD (V1.0 only).
|
||
; $49-$5D Name of program just loaded (V1.0 only).
|
||
; $5F,$60 Start address of data to/from tape (V1.0 only).
|
||
; $61,$62 End address of data to/from tape (V1.0 only).
|
||
; $63 1 when using AUTO else 0 (V1.0 only).
|
||
; $64 0 for Basic, 1 for machine code (V1.0 only).
|
||
; $67 Tape speed - 0 fast, 1 slow (V1.0 only).
|
||
; $85 String block stack pointer.
|
||
; $86,$87 Address of top active string in memory.
|
||
; $88-$90 Temporary string stack.
|
||
; $91,$92 String address pointer.
|
||
; $93,$94 General memory pointer.
|
||
; $95—$99 Work area for multiply and divide routines.
|
||
; $9A,$9B Start of Basic pointer.
|
||
; $9C,$9D End of Basic pointer.
|
||
|
||
; $9E,$9F End of variables pointer.
|
||
; $A0,$A1 End of Arrays pointer.
|
||
; $A2,$A3 Bottom of string area pointer.
|
||
; $A4,$A5 Work pointer for allocating strings.
|
||
; $A6,$A7 Himem.
|
||
; $A8,$A9 Current line number, top byte is #FF if in command mode.
|
||
; $AA,$AB Previous line number.
|
||
; $AC,$AD Last line start address.
|
||
; $AE,$AF Temporary copy of line number.
|
||
; $B0,$B1 Data pointer.
|
||
; $B2,$B3 Data pointer.
|
||
; $B4,$B5 Last variable name accessed.
|
||
; $B6,$B7 Address of last variable value accessed.
|
||
; $B8,$B9 Destination pointer for temporary assignment of variable.
|
||
; $BA Temporary storage for expression evaluator.
|
||
; $BD—$C1 Temporary storage of floating point accumulator.
|
||
; $BD,$BE FN (function) pointer.
|
||
; $BF,$C0 String pointer.
|
||
; $C2 String pointer size, used in Garbage Collection.
|
||
; $C3—$C5 Jump location to evaluate numeric functions.
|
||
; ($C5 also used as a temporary store of the rounding byte for mathematical operations).
|
||
; $C6—$CA Temporary storage of floating point accumulator.
|
||
; $C7,$C8 Pointer.
|
||
; $C9,$CA Pointer.
|
||
; $CB—$CF Temporary storage of floating point accumulator.
|
||
; $CE,$CF Pointer for STORE.
|
||
; $D0 Exponent of main floating point accumulator.
|
||
; $D1—$D4 Mantissa of main floating point accumulator.
|
||
; $D5 Sign of mantissa for main FPA when unpacked.
|
||
; $D6 Series evaluation counter.
|
||
; $D7 Sign extend byte.
|
||
; $D8 Exponent of work floating point accumulator.
|
||
; $D9—$DC Mantissa of work floating point accumulator.
|
||
; $DD Sign of mantissa for work FPA when unpacked.
|
||
; $DE,$DF String pointer.
|
||
; $DE Holds Exclusive OR of sign byte of both FPAs.
|
||
; $DF Rounding byte for calculations.
|
||
; $E0,$E1 Array and string workspace.
|
||
; $E2—$F2 Routine to step through program to find next non space char. (See $EC9C of disassembly).
|
||
; $E9,$EA Position pointer in program.
|
||
; $FA—$FE Copy of floating point number used by RND.
|
||
; $FF Used in number to string conversion
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Page 1
|
||
|
||
; ---------------------------------------------------------------------------
|
||
; Page 2
|
||
|
||
MODEKEY @ $0209 ; Key status (#38 - Default, #A2 - CONTROL, #A4 - Left SHIFT, #A5 - FUNCTION (Atm), #A7 - Right SHIFT)
|
||
CAPSLOCK @ $020C ; $7F = not locked, $FF = locked
|
||
|
||
PTR_SCR1 @ $0200 ; Pointer for screen handling (adress)
|
||
PTR_SCR2 @ $0202 ; Pointer for screen handling (adress)
|
||
WORK_HIRES @ $0204 ; 4 Work bytes for Hires routines
|
||
KEY_DOWN @ $0208 ; Key address if pressed. (#38 if no key pressed)
|
||
KEY_COLUMN @ $020A ; Saved key column for repeat.
|
||
KEY_TMP @ $020B ; Temporary set by keyboard routines
|
||
KEY_COUNTER @ $020E ; Repeat counter for keyboard.
|
||
|
||
KEY_TMP_REPEAT @ $0210 ; Temporary store of row of key being tested for repeat.
|
||
KEY_TMP_STROBE @ $0211 ; Temporary store of keyboard row during strobe routine.
|
||
; $0212 Holds FB code in hires commands.
|
||
PATTERN_DATA @ $0213 ; Pattern data for hires screen.
|
||
; $0214 Temporary copy of pattern byte for drawing lines.
|
||
; $0215 Holds position of pixel in byte corresponding to position of cursor on hires screen.
|
||
; $0216,$0217 Temporary store of hires X and Y cursor positions.
|
||
; $0218 Temporary store for content of $215.
|
||
HIRES_CURSOR_X @ $0219 ; Hires cursor X coordinate.
|
||
HIRES_CURSOR_Y @ $021A ; Hires cursor Y coordinate.
|
||
HIRES_FLAG @ $021F ; 0 - LORES, 1 - HIRES.
|
||
FLAG_48K @ $0220 ; 0 - 48K Oric, 1 - 16K Oric.
|
||
; $0228-$022A Jump to IRQ routine (V1.0).
|
||
; $022B-$022D Jump to NMI routine (V1.0).
|
||
|
||
JMP_PR_CHR @ $0238 ; Jump to PRINT CHARACTER on screen (V1.1).
|
||
JMP_GET_KEY @ $023B ; Jump to GET KEY routine (V1.1).
|
||
JMP_PRT_BYT @ $023E ; Jump to SEND BYTE TO PRINTER (V1.1).
|
||
; $0241-$0243 Jump to PRINT TO STATUS LINE (V1.1).
|
||
; $0244-$0246 Jump to IRQ routine (V1.1).
|
||
; $0247-$0249 Jump to NMI routine (V1.1).
|
||
; $024A—$024C RTI instruction which can be intercepted by a jump (V1.1)
|
||
|
||
FLAG_TAPE @ $024D ; Tape speed, 0 - fast, 1 - slow (V1.1).
|
||
KB_DELAY @ $024E ; Keyboard initial repeat delay (V1.1).
|
||
KB_DELAY_R @ $024F ; Keyboard successive repeat delay (V1.1).
|
||
; $0251 Cursor enable in CTRL routines (V1.1).
|
||
; $0252 ELSE pending flag, 1 - On, 0 - Off (V1.1).
|
||
; $0256 Printer width (V1.1).
|
||
; $0257 Screen width (V1.1).
|
||
; $0258 Printer cursor position (V1.1).
|
||
; $0259 Screen cursor position (V1.1).
|
||
; $025A Cassette JOIN flag, off when 0 (V1.1).
|
||
; $025B Cassette VERIFY flag, off when 0 (V1.1).
|
||
; $025C Cassette verify error counter (V1.1) (2 bytes)
|
||
; $025E,$025F Contains 1 byte messages printed to status line.
|
||
; $0260 Used by GRAB command.
|
||
; $0261,$0262 Indirect jump for CTRL character routine.
|
||
; $0263,$0264 Temporary storage.
|
||
; $0265 Current cursor state indicator, 0 - Off, 1 - On.
|
||
; $0268 Cursor row number (Status line is row 0)
|
||
; $0269 Cursor column position.
|
||
; $026A Flag byte
|
||
|
||
COLOR_PAPER @ $026B ; Paper colour (+16).
|
||
COLOR_INK @ $026C ; Ink colour.
|
||
; $026D,$026E Start address of screen memory.
|
||
; $026F Number of text lines available on screen (V1.0).
|
||
FLAG_CURSOR @ $0270 ; Cursor on/off flag.
|
||
FLAG_INV @ $0271 ; Cursor invert flag.
|
||
; $0272,$0273 Keyboard timer.
|
||
; $0274,$0275 Cursor timer.
|
||
; $0276,$0277 Spare counter, also used by WAIT (and printer in V1.0).
|
||
; $0278,$0279 Address of second line on screen (V1.1).
|
||
: $027A,$027B Address of first line on screen (V1.1).
|
||
; $027C,$027D Number of characters normally used in screen scrolling (V1.1) = 26 rows x 40 columns = 1,040 bytes (#0410)
|
||
; $027E Number of rows of text available (V1.1).
|
||
; $027F-$028F Name of program to be loaded off cassette (V1.1).
|
||
; $0290-$0292
|
||
; $0293-$02A3 Name of file just loaded off cassette (V1.1).
|
||
; $02A4-$02A8
|
||
; $02A9,$02AA Start address of data to / from cassette (V1.1).
|
||
; $02AB,$02AC End address of data to / from cassette (V1.1).
|
||
FLAG_AUTO @ $02AD ; Auto indicator, 0 is off (V1.1).
|
||
FLAG_TYPE @ $02AE ; Program type.
|
||
; $02AF Array type, copy of $28 (V1.1).
|
||
; $02B0 Array type, copy of $29 (V1.1).
|
||
; $02B1 Bit 7 set to 1 if format error.
|
||
; $02C0 Screen status (0 – GRAB, 2 – TEXT, 3 – HIRES)
|
||
; $02C1,$02C2 Character set start address in HIRES mode (V1.1).
|
||
; $02C3 Cursor movement in HIRES (0 – Absolute, 1 – Relative)
|
||
KEY_LAST @ $02DF ; Latest key from keyboard. Bit 7 set if valid.
|
||
; $02E0 Non zero if error in Sound / Graphics routines.
|
||
PARAM_M1 @ $02E1 ; $02E1-$02E2 First parameter location for the sound and graphics commands, including INK & PAPER. (Lower byte of integer is at $02E1).
|
||
PARAM_M2 @ $02E3 ; $02E3-$02E4 Second parameter location for the sound and graphics commands. (Lower byte of integer is at $02E3).
|
||
PARAM_M3 @ $02E5 ; $02E5-$02E6 Third parameter location for the sound and graphics commands. (Lower byte of integer is at $02E5).
|
||
PARAM_M4 @ $027E ; $02E7,$02E8 Fourth parameter location which is only used by MUSIC and PLAY. (Lower byte of integer is at $02E7).
|
||
; $02F1 Bit 7 set to 1 if printer enabled.
|
||
; $02F2 Bit 7 is EDIT flag, set to 1 when on.
|
||
; $02F4 TRACE flag, set if bit 7 is set.
|
||
; $02F5,$02F6 Indirect jump for '!' routine.
|
||
; $02F8 Temporary row indicator for PLOT.
|
||
; $02FB-$02FD Jump to '&' routine.
|
||
|
||
PATTERN @ $0213
|
||
IRQVec @ $0245 ; "fast" interrupt vector
|
||
TAP_SPEED @ $024D ; Tape speed (0=fast, 1= slow)
|
||
TAP_NAME @ $024F ; Tape name max 16 car, terminated by 0
|
||
TAP_JOINFLAG @ $025A ; 0 = don't joiu, $4A = join BASIC programs
|
||
TAP_VERIFYFLAG @ $025B ; 0 = load, 1 = verify
|
||
TAP_ERRORS @ $025C ; count of verify errors (2 bytes)
|
||
CURS_Y @ $0268
|
||
CURS_X @ $0269
|
||
STATUS @ $026A
|
||
BACKGRND @ $026B
|
||
FOREGRND @ $026C
|
||
TIMER3 @ $0276
|
||
CFILE_NAME @ $027F
|
||
CFOUND_NAME @ $0293
|
||
FILESTART @ $02A9
|
||
FILEEND @ $02AB
|
||
TAP_AUTORUN @ $02AD ; $00 = only load, $C7 = autorun
|
||
TAP_LANGFLAG @ $02AE ; $00 = BASIC, $80 = machine code
|
||
TAP_LOADERR @ $02B1 ; 0 = No errors during loading
|
||
KEYBUF @ $02DF
|
||
PARMERR @ $02E0
|
||
PARAM1 @ $02E1 ; & $02E2
|
||
PARAM2 @ $02E3 ; & $02E4
|
||
PARAM3 @ $02E5 ; & $02E6
|
||
PARAM4 @ $02E7 ; & $02E8
|
||
BANGVEC @ $02F5
|
||
|
||
; Rom 1.1 Entries
|
||
; Routines call from Basic
|
||
|
||
CALL @ $E946
|
||
CHAR @ $F12D
|
||
CIRCLE @ $F37F
|
||
CLEAR @ $C70D
|
||
CLOAD @ $E85B
|
||
CONT @ $C9AD
|
||
CLS @ $CCCE ; Clear Screen
|
||
CSAVE @ $E909
|
||
CURMOV @ $F0FD
|
||
CURSET @ $F0C8
|
||
DATA @ $CA3C
|
||
DEF FN @ $D4BA
|
||
DIM @ $D17E
|
||
DOKE @ $D967
|
||
DRAW @ $F110
|
||
EDIT @ $C692
|
||
END @ $C973
|
||
EXPLODE @ $FACB
|
||
FILL @ $F2C8
|
||
FOR @ $C855
|
||
GET @ $CD46
|
||
GOSUB @ $C9C8
|
||
GOTO @ $C9E5
|
||
GRAB @ $E8E7
|
||
HIMEM @ $EBCE
|
||
HIRES @ $EC33 ; Mode Hires
|
||
IF @ $CA70
|
||
INK @ $F21D
|
||
INPUT @ $CD55
|
||
LET @ $CB1C
|
||
LIST @ $C748
|
||
LLIST @ $C7FD
|
||
LORES @ $D9DE
|
||
LPRINT @ $C809
|
||
MUSIC @ $FC18
|
||
NEW @ $C6EE
|
||
ON @ $CAC2
|
||
PAPER @ $F204
|
||
PATTERN @ $F11D
|
||
PING @ $FA9F
|
||
PLAY @ $FBD0
|
||
PLOT @ $DA51
|
||
POINT @ $F1C8
|
||
POKE @ $D94F
|
||
POP @ $CA12
|
||
PRINT @ $CBAB
|
||
PULL @ $DAA1
|
||
READ @ $CD89
|
||
RECALL @ $E9D1
|
||
RELEASE @ $EC0C
|
||
REM @ $CA99
|
||
RESTORE @ $C952
|
||
RETURN @ $CA12
|
||
RUN @ $C9BD
|
||
SHOOT @ $FAB5
|
||
SOUND @ $FD40
|
||
STOP @ $C971
|
||
STORE @ $E987
|
||
TEXT @ $EC21 ; Mode Text
|
||
TROFF @ $CD10
|
||
TRON @ $CD16
|
||
UNTIL @ $DAA1
|
||
WAIT @ $D958
|
||
ZAP @ $FAE1
|
||
! @ $CD13
|
||
& @ $DADB
|
||
|
||
; Some others ROM calls
|
||
|
||
ROM_GETLINE @ $C592
|
||
ROM_INK @ $F210
|
||
ROM_VDU @ $F77C ; Print char X
|
||
ROM_STOUT @ $F865 ; Print message on A,Y and position X (must be 0 at end)
|
||
ROM_GTORKB @ $EB78 ; Last key pressed in X. IRQ must be on
|
||
ROM_INTER_OFF @ $E76A
|
||
ROM_INTER_ON @ $E93D
|
||
|
||
ROM_TICK @ $FB14 ; Sound used for key pressed
|
||
ROM_TOCK @ $FB2A ; Sound used for CTRL key pressed
|
||
ROM_PLAY @ $FBD0 ; Same as basic call PLAY
|
||
ROM_MUSIC @ $FC18 ; Same as basic call MUSIC
|
||
ROM_SOUND @ $FB40 ; Same as basic call SOUND
|
||
|
||
COLDSTART @ $F88F ; Full init
|
||
WARMSTART @ $F8B2 ; Reset
|
||
ROM_INIT @ $ECCC ; Init var page 0 and 2
|