1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-07-07 07:28:57 +00:00
6502bench/SourceGen/RuntimeData/Oric/ATMOS-ROM.sym65
dma-coco-pc ee25373a43 Modifying errors after feedback
Compiling errors corrected
2021-07-03 22:57:33 +02:00

329 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; 2021 didierv from dmaconcept / CEO Member.
; Version 1.01 of the file, debugging some errors
;
; 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
SYMBOL_EXC @ $CD13 ; ! pour lancement de commandes
SYMBOL_AMP @ $DADB ; & pour lancement de commandes
; 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