;+++++++++++++++++++++++++++++++++++++++++++
; service call from external RAM for Eborsy
; Ver 0.01 2021/12/21 by skyriver
;+++++++++++++++++++++++++++++++++++++++++++
0100 ORGAD EQU 0100H
; +++ G850 I/O +++
0017 INTMASK EQU 017H ; interrupy mask
0019 BANKSEL EQU 019H ; select bank 8000h,c000h
001B RAMSEL EQU 01BH ; set RAM CE 00H:internal 04H:system bus
; +++ GAL I/O address +++
0080 AdrSdcs EQU 80H ; set SDCS(D0)
0081 AdrSpiD EQU 81H ; write/read SPI data(D0)
; +++ memory adress +++
0000 RAMADR EQU 00000H ; start address of RAM area
8000 BNKADR EQU 08000H ; start address of bank area
0050 USEBANK EQU 050H ; use bank No.
0004 BK00EXT EQU 004H ; code to set 0000 - 7FFFF to external RAM
0038 INTRST EQU 00038H ; interrupt entry address
0066 NINTENT EQU 00066H ; NMI entry address
; +++ IOS BIOS +++
BE62 sPOUT EQU 0BE62H ; A:out chara, DE:position
0095 PR80SIZ EQU Pr8000EN - Pr8000
0000' ASEG
ORG ORGAD
0100 F3 Start: DI
0101 18 32 JR St00
0103 3A 8095 IntEnt: LD A,(SavBSel)
0106 D3 19 OUT (BANKSEL),A ; restore BANK selection
0108 CD DB 0CDH ; CALL code
0109 0000 INTADR: DW 0
010B F3 DI
010C DB 19 IN A,(BANKSEL)
010E F6 50 OR USEBANK
0110 D3 19 OUT (BANKSEL),A
0112 C3 8053 JP NewIn1
0115 3A 8096 SrvEnt: LD A,(SavAreg)
0118 F5 PUSH AF
0119 3A 8095 LD A,(SavBSel)
011C D3 19 OUT (BANKSEL),A ; restore BANK selection
011E FB EI
011F F1 POP AF
0120 CD DB 0CDH ; CALL code
0121 0000 IosADR: DW 0
0123 F5 PUSH AF
0124 DB 19 IN A,(BANKSEL)
0126 F6 50 OR USEBANK
0128 F3 DI
0129 D3 19 OUT (BANKSEL),A
012B C3 8080 JP IosSer1
; return to IOCS system
012E 3A 8095 RETURN: LD A,(SavBSEL)
0131 D3 19 OUT (BANKSEL),A
0133 FB EI
0134 C9 RET
0135 AF St00: XOR A
0136 D3 80 OUT (AdrSdcs),A
0138 DB 19 IN A,(BANKSEL)
013A 4F LD C,A
013B F6 50 OR USEBANK
013D D3 19 OUT (BANKSEL),A ; select external bank
013F 79 LD A,C
0140 32 8095 LD (SavBSel),A
0143 ED 73 809B LD (SavSP),SP
0147 31 80DF LD SP,NewSP
014A 21 0158 LD HL,Pr80Cod
014D 11 8000 LD DE,Pr8000
0150 01 0095 LD BC,PR80SIZ
0153 ED B0 LDIR
0155 C3 8000 JP Pr8000
0158 Pr80Cod:
.phase BNKADR
8000 2A 0039 Pr8000: LD HL,(INTRST + 1)
8003 22 0109 LD (INTADR),HL ; set interrupt proc address
8006 3E 04 LD A,BK00EXT
8008 D3 1B OUT (RAMSEL),A
800A 3E C3 LD A,0C3H
800C 32 0038 LD (INTRST),A
800F 21 8044 LD HL,NewInt
8012 22 0039 LD (INTRST + 1),HL
8015 21 45ED LD HL,045EDH ; RETN code
8018 22 0066 LD (0066H),HL ; set NMI entry code
801B 3E 01 LD A,1
801D D3 80 OUT (AdrSdcs),A
801F FB EI
8020 21 BE62 LD HL,sPOUT
8023 22 8099 LD (SrvAdr),HL
8026 3E 48 LD A,'H'
8028 11 0000 LD DE,0
802B CD 8062 CALL IosServ
802E 3E 65 LD A,'e'
8030 11 0001 LD DE,1
8033 CD 8062 CALL IosServ
8036 AF XOR A
8037 D3 80 OUT (AdrSdcs),A
8039 F3 EXIT: DI
803A AF XOR A
803B D3 1B OUT (RAMSEL),A
803D ED 7B 809B LD SP,(SavSP)
8041 C3 012E JP RETURN
8044 F5 NewInt: PUSH AF
8045 AF XOR A
8046 D3 1B OUT (RAMSEL),A ; set 0000 - 7FFF to internal
8048 ED 73 809D LD (SavSP1),SP
804C ED 7B 809B LD SP,(SavSP)
8050 C3 0103 JP IntEnt
8053 3E 04 NewIn1: LD A,BK00EXT
8055 D3 1B OUT (RAMSEL),A
8057 ED 73 809B LD (SavSP),SP
805B ED 7B 809D LD SP,(SavSP1)
805F F1 POP AF
8060 FB EI
8061 C9 RET
; call IOCS service
; SrvAdr <- call address
8062 IosServ:
8062 32 8096 LD (SavAreg),A
8065 AF XOR A
8066 F3 DI
8067 ED 73 809D LD (SavSP1),SP
806B ED 7B 809B LD SP,(SavSP)
806F D3 1B OUT (RAMSEL),A ; set 0000 - 7FFF to internal
8071 22 8097 LD (SavHL),HL
8074 2A 8099 LD HL,(SrvAdr)
8077 22 0121 LD (IosADR),HL
807A 2A 8097 LD HL,(SavHL)
807D C3 0115 JP SrvEnt
8080 IosSer1:
8080 F1 POP AF
8081 32 8096 LD (SavAreg),A
8084 3E 04 LD A,BK00EXT
8086 D3 1B OUT (RAMSEL),A
8088 3A 8096 LD A,(SavAreg)
808B ED 73 809B LD (SavSP),SP
808F ED 7B 809D LD SP,(SavSP1)
8093 FB EI
8094 C9 RET
8095 Pr8000EN:
8095 SavBSel: DS 1
8096 SavAreg: DS 1
8097 SavHL: DS 2
8099 SrvAdr: DS 2
809B SavSP: DS 2
809D SavSP1: DS 2
809F DS 40H
80DF NewSP:
END
|