1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-12-01 22:50:35 +00:00

Merge pull request #95 from club-europe-oric/master

Adding Oric system
This commit is contained in:
Andy McFadden 2021-07-03 14:47:18 -07:00 committed by GitHub
commit 05833b12b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 409 additions and 0 deletions

View File

@ -0,0 +1,65 @@
; 2021 didierv from dmaconcept / CEO member.
; Version 1.00 of the file
;
; 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

View File

@ -0,0 +1,328 @@
; 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

View File

@ -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",