diff --git a/SourceGen/RuntimeData/Oric/ATMOS-IO.sym65 b/SourceGen/RuntimeData/Oric/ATMOS-IO.sym65 new file mode 100644 index 0000000..2a55c94 --- /dev/null +++ b/SourceGen/RuntimeData/Oric/ATMOS-IO.sym65 @@ -0,0 +1,64 @@ +; 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 + +*SYNOPSIS Symbols from the I/O area, on Oric Atmos model. + +; --------------------------------------------------------------------------- +; General structure + +PTR_BASIC @ $0501 ; Début de la zone Basic (1281) +PTR_TXT_CHR1 @ $B400 ; Adresse du charset en mode Txt (46080) +PTR_TXT_CHR2 @ $B800 ; Adresse du charset alt en mode Txt (47104) +PTR_TXT @ $BB80 ; 1st byte text screen (48000) +PTR_HR_CHR1 @ $9800 ; Adresse du charset en mode Hires (38912) +PTR_HR_CHR2 @ $9B00 ; Adresse du charset alt en mode Hires (39680) +PRR_HIRES @ $A000 ; 1st byte hires screen 200*40 + 3 text lines (40960) + +; --------------------------------------------------------------------------- +; Zero page + +; --------------------------------------------------------------------------- +; Page 1 + +; --------------------------------------------------------------------------- +; Page 2 + +; --------------------------------------------------------------------------- +; Page 3 I/O Locations +; 6522 +; Versatile Interface Adapter + +PRB @ $300 ; Port Register B +PRA @ $301 ; Port Register A with handcheck +DDRB @ $302 ; Data Direction Register B +DDRA @ $303 ; Data Direction Register A +T1 @ $304 ; OMS Timer 1 +T1L @ $305 ; OPS Timer 1 Latch +T1TIMER @ $306 +T1TIMERL @ $307 +T2 @ $308 ; OMS Timer 2 +T2L @ $309 ; OPS Timer 2 Latch +SR @ $30A ; Shift Register +ACR @ $30B ; Auxiliary Control Register +PCR @ $30C ; Peripheral Control Register CA1, CA2, CB1 et CB2 +IFR @ $30D ; Interrupt Flags Register +IER @ $30E ; Interrupt Enable Register +PRA2 @ $30F ; Port Register A without handshaking + +; --------------------------------------------------------------------------- +; 6502 Vectors + +NMIVECT @ $FFFA ; $0247 +NMIVECTH @ $FFFB +RSTVECT @ $FFFC ; $F88F +RSTVECTH @ $FFFD +IRQVECT @ $FFFE ; $0244 +IRQVECTH @ $FFFF + + + diff --git a/SourceGen/RuntimeData/Oric/ATMOS-ROM.sym65 b/SourceGen/RuntimeData/Oric/ATMOS-ROM.sym65 new file mode 100644 index 0000000..8c4aa35 --- /dev/null +++ b/SourceGen/RuntimeData/Oric/ATMOS-ROM.sym65 @@ -0,0 +1,327 @@ +; 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 diff --git a/SourceGen/RuntimeData/SystemDefs.json b/SourceGen/RuntimeData/SystemDefs.json index f32f222..a532c9f 100644 --- a/SourceGen/RuntimeData/SystemDefs.json +++ b/SourceGen/RuntimeData/SystemDefs.json @@ -269,6 +269,22 @@ "Parameters" : { } }, + { + "Name" : "Oric Atmos", + "GroupName" : "Oric", + "Cpu" : "6502", + "Speed" : "1", + "Description" : "Oric", + "SymbolFiles" : [ + "RT:Oric/ATMOS-ROM.sym65", + "RT:Oric/ATMOS-IO.sym65" + ], + "ExtensionScripts" : [ + ], + "Parameters" : { + "load-address":"0x500" + } + }, { "Name" : "Generic 6502", "GroupName" : "Generic",