CoCo ROM Equivalents

From The Dragon Archive

This list is maintained in the Toolshed repository!

Direct link: http://sourceforge.net/p/toolshed/code/ci/default/tree/cocoroms/dragon_equivs.asm


The Lxxxx are Coco addresses, second column is Dragon equivalent address

* Coco	Dragon	Comment
L813C	$84F5	? EXBAS COMMAND INTERPRETATION LOOP
L8168	$89b4  ?? (use SN ERROR for now) EXBAS SECONDARY COMMAND HANDLER
L8311	$b6d4	?? CHECK EXBAS CLOAD HANDLER, then main loop
L8316	$b682	?? DO A CSAVE, then main loop
L836C	$994a   SYNTAX CHECK FOR COMMA - leaves value (2 bytes) on stack
L8748	$9b7e   EVALUATE A STRING EXPRESSION
L880E	$9c3e     Assign8BitB      evaluates octal number -> FP
L8955	$9d46   GET REAL TIME CLOCK - into irq routine
L8C1B	$a04e   (or $a04c ?) GET THE CURRENT INPUT CHARACTER -  DLOAD
L8CC6	$a0ea	wait for keypress - flash cursor
L9539	$a8c7	clear current graphics screen with B
L959A	$a928	Set colours
L95AA	$a938	Select Display mode (text z=1, graphics z=0)
L95AC	$a93a     RESET SAM - reset VDU
L95FB	$a989	Set VDG mode from A
L960F	$a99d	Set VDG offset for graphics mode
L9616	$a9a4	Set VDG colour set from $00c1
L962E	$a9bc	SET START GRAPHIC PAGE, PMODE COMMAND
L9650	$a9de	EVALUATE EXPRESSION - PMODE,x
L9653	$a9e1	Set page to B
L9682	$aa10	Select colour set 0 or 1 from B
L9695	$aa23	Reserve HiRes Graphics RAM, move Basic if necessary
L96CB	$aa66	PUT CORRECT ADDRESSES IN FIRST 2 BYTES OF EACH LINE - PCLEAR
L96EC	$aa87	CONSTANT OFFSET OF $600 - init of EXBAS graphics vars
L975F	$aaf7	VEC22  CHECK FOR @ SIGN - PUT
L9AD7	$ae9a	Play note from A
L9CB6	$b051	Draw token dispatch address
L9FB5	$b350	MULTIPLY (UNSIGNED) TWO 16 BIT NUMBERS TOGETHER
LA027	$b3b4	Reset ISR
LA0B6	$b400	Boot Basic
LA0E2	$b449	WARM START FLAG - go to basic main loop
LA171	$b505	GET A CHARACTER FROM CONSOLE IN
LA176	$b50a	HOOK INTO RAM - console in, GET A CHAR FROM INPUT BUFFER
LA199	$bbb5	Flashes cursor
LA1B1	$b538	GETKEY
LA1C1	$bbe5	%INCH% scans keyboard
LA282	$b54a	%OUTCHR% to DEVNUM
LA30A	$bcab	%OUTCH% to screen
LA323	$bca0	Clear VDU line from cursor
LA35F	$b595	SET PRINT PARAMETERS
LA37C	$b5b2	SAVE THE PRINT PARAMETERS
LA39A	$b5d0	inside routine that gets an input line for basic
LA2BF	$bd1a	Send char A to printer
LA3ED	$b623	VERIFY THAT THE FILE TYPE WAS 'INPUT
LA3FB	$b631	'FILE NOT OPEN' ERROR
LA406	$b63c	MAKE SURE SELECTED FILE IS AN OUTPUT FILE, TEST DEVICE NUMBER
LA426	$b65c	CLOSE ALL FILES on cassette
LA429	$b65f	CLOSE ALL FILES (skip ram vector)
LA42D	$b663     Close file (on devnum)
LA511	$b748	Read binary file from tape
LA469	$b6a5	Write Basic program to cassette
LA545	$b777	...EXEC
LA549	$b77b	GO DO A BREAK CHECK
LA59A	$b7cc	(or $bb97) MOVE (B) BYTES FROM (X) TO (U)
LA5A2	$b7d4	GET DEVICE NUMBER
LA5A5	$b7d7	EVALUATE AN EXPRESSION (# then DEVICE NUMBER)
LA5AE	$b7e0	EVALUATE DEVICE NUMBER
LA5C7	$b7f9	SYNTAX ERROR IF ANY MORE CHARS ON THIS LINE
LA5DA	$b80c	BRANCH BACK TO BASIC'S EOF
LA5E4	$b816	LINK BACK TO BASIC'S EOF STATEMENT
LA603	$b835	get file name (open)
LA616	$b848	BAD FILE MODE ERROR
LA61C	$b84e	'FILE ALREADY OPEN' ERROR
LA61F	$b851	DEVICE NUMBER ERROR
LA681	$b8b3	Find File, search tape for matching filename
LA701	$b933	Read first (filename) block from tape to buffer
LA70B	$b93e	%BLKIN% from tape to buffer
LA749	$bdad	%CBIN% input byte from tape to A
LA755	$bda5	%BITIN% from tape to c
LA77C	$bde7	%CSRDON% read leader
LA7CA	$bdcf	%CASON%
LA7D1	$bdd7	(not 100% compatible) In %CASON% WAIT A WHILE
LA7E5	$b991	Write first block
LA7E9	$bddc	CASOFF TURN OFF THE CASSETTE MOTOR (Graham: LA7EB)
LA7F4	$b999	%BLKOUT% to tape
LA82A	$be12	%CBOUT% output byte to tape
LA88D	$b9df	Set LoRes Pixel
LA8B5	$ba07	Reset LoRes Pixel
LA8D9	$ba28	Calc LoRes Pixel Pos
LA928	$ba77     Clear text screen
LA92A	$ba79	Clear text screen with B
LA951	$baa0     JUMP TO 'SOUND' - DO A BEEP
LA974	$bac3     Audio off
LA976	$bac5     Audio on
LA985	$bad4	Reset DAC
LA987	$bad6	Writes A to DAC
LA99D	$baec	Audio on (B=0)
LA9A2	$bd41     %SNDSEL%
LA9DE	$bd52	%JOYIN%
LAC37	$8335	SEE IF ENOUGH ROOM IN RAM
LAC44	$8342	OM ERROR
LAC46	$8344     System error
LAC60	$835e	JUMP TO BASIC'S ERROR HANDLER
LAC73	$8371     OK prompt
LAC7C	$837a	GO TO BASIC'S MAIN LOOP, IT WILL LOAD PROGRAM
LACEF	$83ed     BasVect2
LAD19	$8417     Erases program
LAD21	$841f     BasVect1
LAD33	$8434     Resets stack
LAD9E	$849f     RUN BASIC
LADC6	$84dc	LOOP THROUGH BASIC'S MAIN INTERPRETATION LOOP
LADD4	$84ed	JUMP TO BASIC'S COMMAND HANDLER
LADEB	$851b	GO DO A BREAK CHECK IF A KEY IS DOWN
LADFB	$852b	wait for key press, return in A
LAE15	$8545	GO 'STOP' THE SYSTEM
LAF9A	$86cd
LAFA4	$86da	BRANCH BACK TO BASIC’S 'LET' COMMAND
LAFB1	$86e7	MOVE IT INTO THE STRING SPACE
LB00C	$9dc9	check for ,"
LB01E	$9de3	?not sure, in INPUT
LB069	$879a
LB143	$8874	NUMBER TYPE CHECK
LB146	$8877	'TM' ERROR IF NUMERIC VARIABLE, Get expression
LB148	$8879	DO A 'TM' CHECK
LB156	$8887	EVALUATE AN EXPRESSION, Get string
LB166	$8897	(eqv ROM but usage?) COMING FROM THE 'LET' COMMAND
LB244	$8975	STRIP PROMPT STRING FROM BASIC AND PUT IT ON THE STRING STACK
LB262	$899f	SYNTAX CHECK FOR '(' AND EVALUATE EXPRESSION
LB267	$89a4	CkClBrak
LB26A	$89a7	CkOpBrak
LB26D	$89aa	CkComa
LB26F	$89ac	CkChar
LB277	$89b4	SYNTAX ERROR
LB2CE	$8a0b	JUMP TO BASIC'S SECONDARY COMMAND HANDLER
LB357	$8a94     %GETVAR%
LB3E6	$8b23	EVALUATE EXPRESSION, RETURN VALUE IN ACCD
LB3E9	$8b29	%GETUSR%
LB44A	$8b8d	FC ERROR
LB4F2	$8c35	Assign16Bit (skips to $8c37)
LB4F3	$8c36     Assign8Bit, LOAD ACCB INTO FPA0
LB50F	$8c52	RESERVE ACCB BYTES IN STRING SPACE
LB516	$8c59	PUT ON TEMPORARY STRING STACK
LB591	$8cd7	Force string space garbage collection
LB654	$8d9a	GET LENGTH AND ADDRESS OF STRING
LB657	$8d9d	PURGE THE STRING PUT ON THE STRING STACK
LB659	$8d9f	%DELVAR%
LB69B	$8de1	SAVE STRING DESCRIPTOR ON STRING STACK
LB6A4	$8dea	FIRST BYTE OF STRING EXPRESSION
LB70B	$8e51	Get8Bit
LB70E	$8e54	EVALUATE NUMERIC EXPRESSION AND RETURN VALUE IN ACCB
LB738	$8e7e	SYNTAX CHECK FOR COMMA, EVALUATE EXPRESSION
LB73D	$8e83     Get16Bit
LB764	$8eaa	LIST token dispatch address
LB958	$90a1     Print CR
LB95C	$90a5	SEND A CR TO THE SCREEN
LB99C	$90e5	STRINOUT
LB99F	$90e8     STRINOUT+3, PRINT STRING TO CONSOLE OUT
LB9A2	$90eb	SEND STRING TO CONSOLE OUT
LB9AC	$90f5	SEND BLANK TO CONSOLE OUT
LB9AF	$90f8	SEND A '?' TO THE SCREEN
LB9C5	$910E	oper_plus_dispatch
LBB91	$933c	oper_div_dispatch, DIVIDE FPA1 BY FPA0
LBC14	$93bf	MOVFM, COPY A PACKED FP NUMBER FROM (X) TO FPA0
LBC33	$93de	PACK FPA0 INTO VARDES
LBC35	$93e0	PACK FPA0 AND STORE IT IN STRING SPACE
LBC5F	$940a	SAVE NUMBER IN FPA1
LBDCC	$957a     Print Number,  Print decimal D to screen
LBDD9	$9587	CONVERT FP NUMBER TO ASCII STRING

* name	Dragon	Coco
STRINOUT	$90e5	LB99C
EVALEXPB	$8e51 	LB70B	Get8Bit, Evaluate argument
SYNCOMMA	$89aa	LB26D	CkComa
XBWMST	$b44f	L80C0
CHROUT	$a002	LA002
PUTCHR	$b54a	LA282
CLS	$ba5f	LA910
INTCNV	$8b2d	LB3ED
GIVABF	$8c37	LB4F4
LIST	$8eaa	LB764
INT	$9499	LBCEE

* hooks for extended basic, just use RTS on Dragon, similar entry located
XVEC3	$b64b	(rts) $b54b	Character output
XVEC4	$b64b	(rts) $b50b	Character input
XVEC8	$b64b	(rts) $b664	Close a single device or file
XVEC9	$b64b	(rts) $84de	?About to deal with first char of new statement /PRINT
XVEC15	$b64b	(rts) $8954	Evaluate an expression
XVEC17	$b64b	(rts) $8347	System error
XVEC18	$b64b	(rts) $85a5	RUN statement