diff options
| author | root <root@ka-ata-killa.ourano.james.local> | 2021-02-24 23:45:58 +0000 | 
|---|---|---|
| committer | root <root@ka-ata-killa.ourano.james.local> | 2021-02-24 23:45:58 +0000 | 
| commit | 1575d4f53805f177474b5bb96daebede9b2dfb73 (patch) | |
| tree | 91f6819f7280088bb9344fae7dbef8c43a0a04c0 /docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/E6B0 | |
| download | base-master.tar.gz base-master.tar.bz2 base-master.zip | |
Diffstat (limited to 'docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/E6B0')
| -rw-r--r-- | docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/E6B0 | 1 | 
1 files changed, 1 insertions, 0 deletions
| diff --git a/docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/E6B0 b/docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/E6B0 new file mode 100644 index 0000000..5f1e45f --- /dev/null +++ b/docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/E6B0 @@ -0,0 +1 @@ +*************************************************************************
*                                                                       *
*        OSBYTE LOOK UP TABLE
*                                                                       *
*************************************************************************
E5B3	DB  &21,&E8         ;OSBYTE   0  (&E821)
E5B5	DB  &88,&E9         ;OSBYTE   1  (&E988)
E5B7	DB  &D3,&E6         ;OSBYTE   2  (&E6D3)
E5B9	DB  &97,&E9         ;OSBYTE   3  (&E997)
E5BB	DB  &97,&E9         ;OSBYTE   4  (&E997)
E5BD	DB  &76,&E9         ;OSBYTE   5  (&E976)
E5BF	DB  &88,&E9         ;OSBYTE   6  (&E988)
E5C1	DB  &8B,&E6         ;OSBYTE   7  (&E68B)
E5C3	DB  &89,&E6         ;OSBYTE   8  (&E689)
E5C5	DB  &B0,&E6         ;OSBYTE   9  (&E6B0)
E5C7	DB  &B2,&E6         ;OSBYTE  10  (&E6B2)
E5C9	DB  &95,&E9         ;OSBYTE  11  (&E995)
E5CB	DB  &8C,&E9         ;OSBYTE  12  (&E98C)
E5CD	DB  &F9,&E6         ;OSBYTE  13  (&E6F9)
E5CF	DB  &FA,&E6         ;OSBYTE  14  (&E6FA)
E5D1	DB  &A8,&F0         ;OSBYTE  15  (&F0A8)
E5D3	DB  &06,&E7         ;OSBYTE  16  (&E706)
E5D5	DB  &8C,&DE         ;OSBYTE  17  (&DE8C)
E5D7	DB  &C8,&E9         ;OSBYTE  18  (&E9C8)
E5D9	DB  &B6,&E9         ;OSBYTE  19  (&E9B6)
E5DB	DB  &07,&CD         ;OSBYTE  20  (&CD07)
E5DD	DB  &B4,&F0         ;OSBYTE  21  (&F0B4)
E5DF	DB  &6C,&E8         ;OSBYTE 117  (&E86C)
E5E1	DB  &D9,&E9         ;OSBYTE 118  (&E9D9)
E5E3	DB  &75,&E2         ;OSBYTE 119  (&E275)
E5E5	DB  &45,&F0         ;OSBYTE 120  (&F045)
E5E7	DB  &CF,&F0         ;OSBYTE 121  (&F0CF)
E5E9	DB  &CD,&F0         ;OSBYTE 122  (&F0CD)
E5EB	DB  &97,&E1         ;OSBYTE 123  (&E197)
E5ED	DB  &73,&E6         ;OSBYTE 124  (&E673)
E5EF	DB  &74,&E6         ;OSBYTE 125  (&E674)
E5F1	DB  &5C,&E6         ;OSBYTE 126  (&E65C)
E5F3	DB  &35,&E0         ;OSBYTE 127  (&E035)
E5F5	DB  &4F,&E7         ;OSBYTE 128  (&E74F)
E5F7	DB  &13,&E7         ;OSBYTE 129  (&E713)
E5F9	DB  &29,&E7         ;OSBYTE 130  (&E729)
E5FB	DB  &85,&F0         ;OSBYTE 131  (&F085)
E5FD	DB  &23,&D9         ;OSBYTE 132  (&D923)
E5FF	DB  &26,&D9         ;OSBYTE 133  (&D926)
E601	DB  &47,&D6         ;OSBYTE 134  (&D647)
E603	DB  &C2,&D7         ;OSBYTE 135  (&D7C2)
E605	DB  &57,&E6         ;OSBYTE 136  (&E657)
E607	DB  &7F,&E6         ;OSBYTE 137  (&E67F)
E609	DB  &AF,&E4         ;OSBYTE 138  (&E4AF)
E60B	DB  &34,&E0         ;OSBYTE 139  (&E034)
E60D	DB  &35,&F1         ;OSBYTE 140  (&F135)
E60F	DB  &35,&F1         ;OSBYTE 141  (&F135)
E611	DB  &E7,&DB         ;OSBYTE 142  (&DBE7)
E613	DB  &68,&F1         ;OSBYTE 143  (&F168)
E615	DB  &E3,&EA         ;OSBYTE 144  (&EAE3)
E617	DB  &60,&E4         ;OSBYTE 145  (&E460)
E619	DB  &AA,&FF         ;OSBYTE 146  (&FFAA)
E61B	DB  &F4,&EA         ;OSBYTE 147  (&EAF4)
E61D	DB  &AE,&FF         ;OSBYTE 148  (&FFAE)
E61F	DB  &F9,&EA         ;OSBYTE 149  (&EAF9)
E621	DB  &B2,&FF         ;OSBYTE 150  (&FFB2)
E623	DB  &FE,&EA         ;OSBYTE 151  (&EAFE)
E625	DB  &5B,&E4         ;OSBYTE 152  (&E45B)
E627	DB  &F3,&E4         ;OSBYTE 153  (&E4F3)
E629	DB  &FF,&E9         ;OSBYTE 154  (&E9FF)
E62B	DB  &10,&EA         ;OSBYTE 155  (&EA10)
E62D	DB  &7C,&E1         ;OSBYTE 156  (&E17C)
E62F	DB  &A7,&FF         ;OSBYTE 157  (&FFA7)
E631	DB  &6D,&EE         ;OSBYTE 158  (&EE6D)
E633	DB  &7F,&EE         ;OSBYTE 159  (&EE7F)
E635	DB  &C0,&E9         ;OSBYTE 160  (&E9C0)
E637	DB  &9C,&E9         ;
E639	DB  &59,&E6         ;
*************************************************************************
*                                                                       *
*        OSWORD LOOK UP TABLE                                           *
*                                                                       *
*************************************************************************
E63B	DB  &02,&E9         ;OSWORD   0  (&E902)
E63D	DB  &D5,&E8         ;OSWORD   1  (&E8D5)
E63F	DB  &E8,&E8         ;OSWORD   2  (&E8E8)
E641	DB  &D1,&E8         ;OSWORD   3  (&E8D1)
E643	DB  &E4,&E8         ;OSWORD   4  (&E8E4)
E645	DB  &03,&E8         ;OSWORD   5  (&E803)
E647	DB  &0B,&E8         ;OSWORD   6  (&E80B)
E649	DB  &2D,&E8         ;OSWORD   7  (&E82D)
E64B	DB  &AE,&E8         ;OSWORD   8  (&E8AE)
E64D	DB  &35,&C7         ;OSWORD   9  (&C735)
E64F	DB  &F3,&CB         ;OSWORD  10  (&CBF3)
E651	DB  &48,&C7         ;OSWORD  11  (&C748)
E653	DB  &E0,&C8         ;OSWORD  12  (&C8E0)
E655	DB  &CE,&D5         ;OSWORD  13  (&D5CE)
*************************************************************************
*                                                                       *
*       OSBYTE 136   Execute Code via User Vector                       *
*                                                                       *
*       *CODE effectively                                               *
*                                                                       *
*************************************************************************
E658	LDA #00     ;A=0
*************************************************************************
*                                                                       *
*       *LINE   entry                                                   *
*                                                                       *
*************************************************************************
E659	JMP (&0200) ;Jump via USERV
*************************************************************************
*                                                                       *
*       OSBYTE  126  Acknowledge detection of ESCAPE condition          *
*                                                                       *
*************************************************************************
E65C	LDX #&00    ;X=0
E65E	BIT &FF     ;if bit 7 not set there is no ESCAPE condition
E660	BPL &E673   ;so E673
E662	LDA &0276   ;else get ESCAPE Action, if this is 0
    	            ;Clear ESCAPE
    	            ;close EXEC files
    	            ;purge all buffers
    	            ;reset VDU paging counter
E665	BNE &E671   ;else do none of the above
E667	CLI         ;allow interrupts
E668	STA &0269   ;number of lines printed since last halt in paged
    	            ;mode = 0
E66B	JSR &F68D   ;close any open EXEC files
E66E	JSR &F0AA   ;clear all buffers
E671	LDX #&FF    ;X=&FF to indicate ESCAPE acknowledged
*************************************************************************
*                                                                       *
*       OSBYTE  124  Clear ESCAPE condition                             *
*                                                                       *
*************************************************************************
E673	CLC         ;clear carry
*************************************************************************
*                                                                       *
*       OSBYTE  125  Set ESCAPE flag                                    *
*                                                                       *
*************************************************************************
E674	ROR &FF     ;clear  bit 7 of ESCAPE flag
E676	BIT &027A   ;read bit 7 of Tube flag
E679	BMI &E67C   ;if set TUBE exists so E67C
E67B	RTS         ;else RETURN
    	            ;
E67C	JMP &0403   ;Jump to Tube entry point
*************************************************************************
*                                                                       *
*       OSBYTE  137  Turn on Tape motor                                 *
*                                                                       *
*************************************************************************
E67F	LDA &0282   ;get serial ULA control setting
E682	TAY         ;Y=A
E683	ROL         ;rotate left to get bit 7 into carry
E684	CPX #&01    ;if X=1 then user wants motor on so CARRY set else
    	            ;carry is cleared
E686	ROR         ;put carry back in control RAM copy
E687	BVC &E6A7   ;if bit 6 is clear then cassette is selected
    	            ;so write to control register and RAM copy
E689	LDA #&38    ;A=ASCII 8
*************************************************************************
*                                                                       *
*       OSBYTE 08/07 set serial baud rates                              *
*                                                                       *
*************************************************************************
    	on entry X=baud rate
    	     A=8 transmit
    	     A=7 receive
E68B	EOR #&3F    ;converts ASCII 8 to 7 binary and ASCII 7 to 8 binary
E68D	STA &FA     ;store result
E68F	LDY &0282   ;get serial ULA control register setting
E692	CPX #&09    ;is it 9 or more?
E694	BCS &E6AD   ;if so exit
E696	AND &E9AD,X ;and with byte from look up table
E699	STA &FB     ;store it
E69B	TYA         ;put Y in A
E69C	ORA &FA     ;and or with Accumulator
E69E	EOR &FA     ;zero the three bits set true
E6A0	ORA &FB     ;set up data read from look up table + bit 6
E6A2	ORA #&40    ;
E6A4	EOR &025D   ;write cassette/RS423 flag
E6A7	STA &0282   ;store serial ULA flag
E6AA	STA &FE10   ;and write to control register
E6AD	TYA         ;put Y in A to save old contents
E6AE	TAX         ;write new setting to X
E6AF	RTS         ;and return
OS SERIES VII
GEOFF COX
*************************************************************************
*                                                                       *
*       OSBYTE  9   Duration of first colour                            *
*                                                                       *
*************************************************************************
;on entry Y=0, X=new value
E6B0	INY         ;Y is incremented to 1
E6B1	CLC         ;clear carry
*************************************************************************
*                                                                       *
*       OSBYTE  10   Duration of second colour                          *
*                                                                       *
*************************************************************************
;on entry Y=0 or 1 if from FX 9 call, X=new value
E6B2	LDA &0252,Y ;get mark period count
E6B5	PHA         ;push it
E6B6	TXA         ;get new count
E6B7	STA &0252,Y ;store it
E6BA	PLA         ;get back original value
E6BB	TAY         ;put it in Y
E6BC	LDA &0251   ;get value of flash counter
E6BF	BNE &E6D1   ;if not zero E6D1
E6C1	STX &0251   ;else restore old value
E6C4	LDA &0248   ;get current video ULA control register setting
E6C7	PHP         ;push flags
E6C8	ROR         ;rotate bit 0 into carry, carry into bit 7
E6C9	PLP         ;get back flags
E6CA	ROL         ;rotate back carry into bit 0
E6CB	STA &0248   ;store it in RAM copy
E6CE	STA &FE20   ;and ULA control register
E6D1	BVC &E6AD   ;then exit via OSBYTE 7/8
*************************************************************************
*                                                                       *
*       OSBYTE  2   select input stream                                 *
*                                                                       *
*************************************************************************
;on input X contains stream number
E6D3	TXA         ;A=X
E6D4	AND #&01    ;blank out bits 1 - 7
E6D6	PHA         ;push A
E6D7	LDA &0250   ;and get current ACIA control setting
E6DA	ROL         ;Bit 7 into carry
E6DB	CPX #&01    ;if X>=1 then
E6DD	ROR         ;bit 7 of A=1
E6DE	CMP &0250   ;compare this with ACIA control setting
E6E1	PHP         ;push processor
E6E2	STA &0250   ;put A into ACIA control setting
E6E5	STA &FE08   ;and write to control register
E6E8	JSR &E173   ;set up RS423 buffer
E6EB	PLP         ;get back P
E6EC	BEQ &E6F1   ;if new setting different from old E6F1 else
E6EE	BIT &FE09   ;set bit 6 and 7
E6F1	LDX &0241   ;get current input buffer number
E6F4	PLA         ;get back A
E6F5	STA &0241   ;store it
E6F8	RTS         ;and return
    	
*************************************************************************
*                                                                       *
*       OSBYTE  13   disable events                                     *
*                                                                       *
*************************************************************************
    	;X contains event number 0-9
E6F9	TYA         ;Y=0 A=0
*************************************************************************
*                                                                       *
*       OSBYTE  14   enable events                                      *
*                                                                       *
*************************************************************************
    	;X contains event number 0-9
E6FA	CPX #&0A    ;if X>9
E6FC	BCS &E6AE   ;goto E6AE for exit
E6FE	LDY &02BF,X ;else get event enable flag
E701	STA &02BF,X ;store new value in flag
E704	BVC &E6AD   ;and exit via E6AD
*************************************************************************
*                                                                       *
*       OSBYTE  16   Select A/D channel                                 *
*                                                                       *
*************************************************************************
 ;X contains channel number or 0 if disable conversion
E706	BEQ &E70B   ;if X=0 then E70B
E708	JSR &DE8C   ;start conversion
E70B	LDA &024D   ;get  current maximum ADC channel number
E70E	STX &024D   ;store new value
E711	TAX         ;put old value in X
E712	RTS         ;and exit
    	            ;
*************************************************************************
*                                                                       *
*       OSBYTE 129   Read key within time limit                         *
*                                                                       *
*************************************************************************
 ;X and Y contains either time limit in centi seconds Y=&7F max
 ; or Y=&FF and X=-ve INKEY value
E713	TYA         ;A=Y
E714	BMI &E721   ;if Y=&FF the E721
E716	CLI         ;else allow interrupts
E717	JSR &DEBB   ;and go to timed routine
E71A	BCS &E71F   ;if carry set then E71F
E71C	TAX         ;then X=A
E71D	LDA #&00    ;A=0
E71F	TAY         ;Y=A
E720	RTS         ;and return
    	            ;
    	            ;scan keyboard
E721	TXA         ;A=X
E722	EOR #&7F    ;convert to keyboard input
E724	TAX         ;X=A
E725	JSR &F068   ;then scan keyboard
E728	ROL         ;put bit 7 into carry
E729	LDX #&FF    ;X=&FF
E72B	LDY #&FF    ;Y=&FF
E72D	BCS &E731   ;if bit 7 of A was set goto E731 (RTS)
E72F	INX         ;else X=0
E730	INY         ;and Y=0
E731	RTS         ;and exit
********** check occupancy of input or free space of output buffer *******
    	            ;X=buffer number
    	;Buffer number  Address         Flag    Out pointer     In pointer
    	;0=Keyboard     3E0-3FF         2CF     2D8             2E1
    	;1=RS423 Input  A00-AFF         2D0     2D9             2E2
    	;2=RS423 output 900-9BF         2D1     2DA             2E3
    	;3=printer      880-8BF         2D2     2DB             2E4
    	;4=sound0       840-84F         2D3     2DC             2E5
    	;5=sound1       850-85F         2D4     2DD             2E6
    	;6=sound2       860-86F         2D5     2DE             2E7
    	;7=sound3       870-87F         2D6     2DF             2E8
    	;8=speech       8C0-8FF         2D7     2E0             2E9
E732	TXA         ;buffer number in A
E733	EOR #&FF    ;invert it
E735	TAX         ;X=A
E736	CPX #&02    ;is X>1
E738	CLV         ;clear V flag
E739	BVC &E73E   ;and goto E73E count buffer
E73B	BIT &D9B7   ;set V
E73E	JMP (&022E) ;CNPV defaults to E1D1
************* check RS423 input buffer ************************************
E741	SEC
E742	LDX #&01    ;X=1 to point to buffer
E744	JSR &E738   ;and count it
E747	CPY #&01    ;if the hi byte of the answer is 1 or more
E749	BCS &E74E   ;then Return
E74B	CPX &025B   ;else compare with minimum buffer space
E74E	RTS         ;and exit
*************************************************************************
*                                                                       *
*       OSBYTE 128  READ ADC CHANNEL                                    *
*                                                                       *
*************************************************************************
;ON Entry: X=0             Exit Y contains number of last channel converted
;   	   X=channel number       X,Y contain 16 bit value read from channe
;   	   X<0 Y=&FF              X returns information about various buffers
;   	   X=&FF (keyboard )      X=number of characters in buffer
;   	   X=&FE (RS423 Input)    X=number of characters in buffer
;   	   X=&FD (RS423 output)   X=number of empty spaces in buffer
;   	   X=&FC (Printer)        X=number of empty spaces in buffer
;   	   X=&FB (sound 0)        X=number of empty spaces in buffer
;   	   X=&FA (sound 1)        X=number of empty spaces in buffer
;   	   X=&F9 (sound 2)        X=number of empty spaces in buffer
;   	   X=&F8 (sound 3)        X=number of empty spaces in buffer
;   	   X=&F7 (Speech )        X=number of empty spaces in buffer
E74F	BMI &E732   ;if X is -ve then E732 count spaces
E751	BEQ &E75F   ;if X=0 then E75F
E753	CPX #&05    ;else check for Valid channel
E755	BCS &E729   ;if not E729 set X & Y to 0 and exit
E757	LDY &02B9,X ;get conversion values for channel of interest Hi &
E75A	LDA &02B5,X ;lo byte
E75D	TAX         ;X=lo byte
E75E	RTS         ;and exit
E75F	LDA &FE40   ;read system VIA port B
E762	ROR         ;move high nybble to low
E763	ROR         ;
E764	ROR         ;
E765	ROR         ;
E766	EOR #&FF    ;and invert it
E768	AND #&03    ;isolate the FIRE buttons
E76A	LDY &02BE   ;get analogue system flag byte
E76D	STX &02BE   ;store X here
E770	TAX         ;A=X bits 0 and 1 indicate fire buttons
E771	RTS         ;and return
**************************************************************************
**************************************************************************
**                                                                      **
**      OSBYTE  DEFAULT ENTRY POINT                                     **
**                                                                      **
**      pointed to by default BYTEV                                     **
**                                                                      **
**************************************************************************
**************************************************************************
E772	PHA         ;save A
E773	PHP         ;save Processor flags
E774	SEI         ;disable interrupts
E775	STA &EF     ;store A,X,Y in zero page
E777	STX &F0     ;
E779	STY &F1     ;
E77B	LDX #&07    ;X=7 to signal osbyte is being attempted
E77D	CMP #&75    ;if A=0-116
E77F	BCC &E7C2   ;then E7C2
E781	CMP #&A1    ;if A<161
E783	BCC &E78E   ;then E78E
E785	CMP #&A6    ;if A=161-165
E787	BCC &E7C8   ;then EC78
E789	CLC         ;clear carry
E78A	LDA #&A1    ;A=&A1
E78C	ADC #&00    ;
********* process osbyte calls 117 - 160 *****************************
E78E	SEC         ;set carry
E78F	SBC #&5F    ;convert to &16 to &41 (22-65)
E791	ASL         ;double it (44-130)
E792	SEC         ;set carry
E793	STY &F1     ;store Y
E795	TAY         ;Y=A
E796	BIT &025E   ;read econet intercept flag
E799	BPL &E7A2   ;if no econet intercept required E7A2
E79B	TXA         ;else A=X
E79C	CLV         ;V=0
E79D	JSR &E57E   ; to JMP via ECONET vector
E7A0	BVS &E7BC   ;if return with V set E7BC
E7A2	LDA &E5B4,Y ;get address from table
E7A5	STA &FB     ;store it as hi byte
E7A7	LDA &E5B3,Y ;repeat for lo byte
E7AA	STA &FA     ;
E7AC	LDA &EF     ;restore A
E7AE	LDY &F1     ;Y
E7B0	BCS &E7B6   ;if carry is set E7B6
E7B2	LDY #&00    ;else
E7B4	LDA (&F0),Y ;get value from address pointed to by &F0/1 (Y,X)
E7B6	SEC         ;set carry
E7B7	LDX &F0     ;restore X
E7B9	JSR &F058   ;call &FA/B
E7BC	ROR         ;C=bit 0
E7BD	PLP         ;get back flags
E7BE	ROL         ;bit 0=Carry
E7BF	PLA         ;get back A
E7C0	CLV         ;clear V
E7C1	RTS         ;and exit
*************** Process OSBYTE CALLS BELOW &75 **************************
E7C2	LDY #&00    ;Y=0
E7C4	CMP #&16    ;if A<&16
E7C6	BCC &E791   ;goto E791
E7C8	PHP         ;push flags
E7C9	PHP         ;push flags
E7CA	PLA         ;pull flags
E7CB	PLA         ;pull flags
E7CC	JSR &F168   ;offer paged ROMS service 7/8 unrecognised osbyte/word
E7CF	BNE &E7D6   ;if roms don't recognise it then E7D6
E7D1	LDX &F0     ;else restore X
E7D3	JMP &E7BC   ;and exit
E7D6	PLP         ;else pull flags
E7D7	PLA         ;and A
E7D8	BIT &D9B7   ;set V and C
E7DB	RTS         ;and return
E7DC	LDA &EB     ;read cassette critical flag bit 7 = busy
E7DE	BMI &E812   ;if busy then EB12
E7E0	LDA #&08    ;else A=8 to check current Catalogue status
E7E2	AND &E2     ;by anding with CFS status flag
E7E4	BNE &E7EA   ;if not set (not in use) then E7EA RTS
E7E6	LDA #&88    ;A=%10001000
E7E8	AND &BB     ;AND with FS options (short msg bits)
E7EA	RTS         ;RETURN
**************************************************************************
**************************************************************************
**                                                                      **
**      OSWORD  DEFAULT ENTRY POINT                                     **
**                                                                      **
**      pointed to by default WORDV                                     **
**                                                                      **
**************************************************************************
**************************************************************************
E7EB	PHA         ;Push A
E7EC	PHP         ;Push flags
E7ED	SEI         ;disable interrupts
E7EE	STA &EF     ;store A,X,Y
E7F0	STX &F0     ;
E7F2	STY &F1     ;
E7F4	LDX #&08    ;X=8
E7F6	CMP #&E0    ;if A=>224
E7F8	BCS &E78A   ;then E78A with carry set
E7FA	CMP #&0E    ;else if A=>14
E7FC	BCS &E7C8   ;else E7C8 with carry set pass to ROMS & exit
E7FE	ADC #&44    ;add to form pointer to table
E800	ASL         ;double it
E801	BCC &E793   ;goto E793 ALWAYS!! (carry clear E7F8)
    	            ;this reads bytes from table and enters routine
*************************************************************************
*                                                                       *
*       OSWORD  05   ENTRY POINT                                        *
*                                                                       *
*       read a byte from I/O memory                                     *
*                                                                       *
*************************************************************************
;block of 4 bytes set at address pointed to by 00F0/1 (Y,X)
;XY +0  ADDRESS of byte
;   +4  on exit byte read
E803	JSR &E815   ;set up address of data block
E806	LDA (&F9,X) ;get byte
E808	STA (&F0),Y ;store it
E80A	RTS         ;exit
*************************************************************************
*                                                                       *
*       OSWORD  06   ENTRY POINT                                        *
*                                                                       *
*       write a byte to I/O memory                                      *
*                                                                       *
*************************************************************************
;block of 5 bytes set at address pointed to by 00F0/1 (Y,X)
;XY +0  ADDRESS of byte
;   +4  byte to be written
E80B	JSR &E815   ;set up address
E80E	LDA (&F0),Y ;get byte
E810	STA (&F9,X) ;store it
E812	LDA #&00    ;a=0
E814	RTS         ;exit
********************: set up data block *********************************
E815	STA &FA     ;&FA=A
E817	INY         ;Y=1
E818	LDA (&F0),Y ;get byte from block
E81A	STA &FB     ;store it
E81C	LDY #&04    ;Y=4
E81E	LDX #&01    ;X=1
E820	RTS         ;and exit
*************************************************************************
*                                                                       *
*       OSBYTE  00   ENTRY POINT                                        *
*                                                                       *
*       read OS version number                                          *
*                                                                       *
*************************************************************************
E821	BNE &E81E   ;if A <> 0 then exit else print error
E823	BRK         ;
E824	DB  &F7             ;error number
E825	DB  'OS 1.20'       ;error message
E82C	BRK
\ No newline at end of file | 
