Doing interrupt sheme

This commit is contained in:
Anatoliy Belyanskiy 2023-06-28 04:06:18 +10:00
parent e8e15b65cb
commit 36e3be6eb0
7 changed files with 282 additions and 78 deletions

@ -1 +1 @@
Subproject commit 38c3f62f6d7fa9f4c977eb23e3ff9ea7bf3638f0 Subproject commit 520455dbdc4c10f1850fd697aa5be4703d6cfd27

View File

@ -71,6 +71,35 @@ RST_30:
BLOCK #38-$,0 BLOCK #38-$,0
; INTERUPT Point ; INTERUPT Point
RST38: RST38:
IF TEST_INT
;INT:
PUSH BC
PUSH AF
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD A,(SYS_PAGE.INT_ID)
CP #AA
JR Z,YESINT
OUT (C),B
JR NOINT
YESINT: PUSH HL
LD HL,(SYS_PAGE.INT_ADRESS)
LD A,H
OR L
LD A,(SYS_PAGE.INT_PAGE)
OUT (C),B
PUSH DE
CALL NZ,EXTINT
POP DE
POP HL
NOINT: POP AF
POP BC
ENDIF
EI EI
RETI RETI
@ -81,10 +110,11 @@ RST38:
;======================================= ;=======================================
IFN TEST_INT
_mInfoALIGN #10,0 _mInfoALIGN #10,0
;TABLE_X EQU #A0 ; any adress < #C0 with mask %xxxx0000 ; any adress < #C0 with mask %xxxx0000
; BLOCK TABLE_X-$ ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
TABLE_X: ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a TABLE_X:
.v0: DB 00101000b ; "0" .v0: DB 00101000b ; "0"
.v1: DB 10111101b ; "1" .v1: DB 10111101b ; "1"
.v2: DB 00110010b ; "2" .v2: DB 00110010b ; "2"
@ -101,7 +131,13 @@ TABLE_X: ; ⠡
.vD: DB 10110000b ; "D" .vD: DB 10110000b ; "D"
.vE: DB 01100010b ; "E" .vE: DB 01100010b ; "E"
.vF: DB 01100011b ; "F" .vF: DB 01100011b ; "F"
ENDIF
;======================================= ;=======================================
;
;
;=======================================
IFN TEST_INT
RESTARTS EQU #FFE0 ; !FIXIT ¢ë­¥á⨠¢ SP2000.inc RESTARTS EQU #FFE0 ; !FIXIT ¢ë­¥á⨠¢ SP2000.inc
GLOBAL_RESET: GLOBAL_RESET:
DI DI
@ -117,16 +153,15 @@ GLOBAL_RESET:
INC DE INC DE
DJNZ .compare DJNZ .compare
JP RESTARTS JP RESTARTS
ENDIF
;======================================= ;=======================================
_mInfoBLOCK #66-$,0 _mInfoBLOCK #66-$,0
NMI_Point: NMI_Point:
; १¥à¢ 3 ¡ ©â  ¤«ï ª®¬ ­¤ë JP ; १¥à¢ 3 ¡ ©â  ¤«ï ª®¬ ­¤ë JP
;NOP ;NOP
;NOP ;NOP
;NOP ;NOP
RETN RETN
;======================================= ;=======================================
;SET_BIOS_TO_RAM: ; ¯à®£à ¬¬  à ¡®â ¥â ­   ¤à¥á¥ 0C000h ;SET_BIOS_TO_RAM: ; ¯à®£à ¬¬  à ¡®â ¥â ­   ¤à¥á¥ 0C000h
@ -196,24 +231,56 @@ BoardID:
; BLOCK #100-$,0 ; BLOCK #100-$,0
; RESTARTS EQU #FFE0 ; !FIXIT ¢ë­¥á⨠¢ SP2000.inc ;=======================================
; GLOBAL_RESET: IF TEST_INT
; DI _mInfoALIGN #10,0
; IM 1 ; any adress < #C0 with mask %xxxx0000
; LD HL,RESTARTS ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
; LD DE,RESTARTS_PROG TABLE_X: ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
; LD B,RESTARTS_PROG.Size .v0: DB 00101000b ; "0"
; .compare: .v1: DB 10111101b ; "1"
; LD A,(DE) .v2: DB 00110010b ; "2"
; CP (HL) .v3: DB 00110100b ; "3"
; JR NZ,NO_RESTART .v4: DB 10100101b ; "4"
; INC HL .v5: DB 01100100b ; "5"
; INC DE .v6: DB 01100000b ; "6"
; DJNZ .compare .v7: DB 00111101b ; "7"
; JP RESTARTS .v8: DB 00100000b ; "8"
.v9: DB 00100100b ; "9"
;-----[¯¥à¥å¢ â RESET ­¥ á®áâ®ï«áï]----- .vA: DB 00100001b ; "A"
.vB: DB 11100000b ; "B"
.vC: DB 01101010b ; "C"
.vD: DB 10110000b ; "D"
.vE: DB 01100010b ; "E"
.vF: DB 01100011b ; "F"
ENDIF
;=======================================
; ;
;
;=======================================
IF TEST_INT
RESTARTS EQU #FFE0 ; !FIXIT ¢ë­¥á⨠¢ SP2000.inc
GLOBAL_RESET:
DI
IM 1
LD HL,RESTARTS
LD DE,RESTARTS_PROG
LD B,RESTARTS_PROG.Size
.compare:
LD A,(DE)
CP (HL)
JR NZ,NO_RESTART
INC HL
INC DE
DJNZ .compare
JP RESTARTS
ENDIF
;=======================================
;
;
;-----[¯¥à¥å¢ â RESET ­¥ á®áâ®ï«áï]-----
NO_RESTART: NO_RESTART:
; á⥪ ¥éñ ­¥ ¨á¯®«ì§ã¥¬!!! ; á⥪ ¥éñ ­¥ ¨á¯®«ì§ã¥¬!!!
LD SP,IX ; á®åà ­¨âì §­ ç¥­¨¥ ¯¥à¥¤ ­­®¥ § £àã§ç¨ª®¬ ª®­äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â ) LD SP,IX ; á®åà ­¨âì §­ ç¥­¨¥ ¯¥à¥¤ ­­®¥ § £àã§ç¨ª®¬ ª®­äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
@ -249,6 +316,87 @@ NO_RESTART:
; no boundary set! ; no boundary set!
; ;
;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
IF TEST_INT
;!FIXIT ¯¥à¥­¥á⨠¢ ROM.BIOS ¨ ᤥ« âì
; â ª, ç⮡ ¬®£«  ¯à ¢¨«ì­® ¯à룠âì ¢
; «î¡ë¥ á«®âë ¨ à ¡®â âì á DSS
;----------------[int]------------------
EXTINT: OR A
RET Z
;LD C,SLOT1
BIT 7,H
JR Z,.L2
LD C,SLOT2
BIT 6,H
JR Z,.L1
LD C,SLOT3
.L1: IN B,(C)
PUSH BC
OUT (C),A
CALL .JPHL
POP BC
OUT (C),B
RET
; ¯à®¢¥àª  ­  ­ã«¥¢®© á«®â
.L2: BIT 6,H
LD C,SLOT1
JR NZ,.L1 ; ¯à®¤®«¦ ¥¬ ¥á«¨ ­¥­ã«¥¢®© á«®â
PUSH HL
LD HL,-.stackDepth - .switchProcedure.size + .patch-2
ADD HL,SP
PUSH HL
LD HL,-.stackDepth - .switchProcedure.size ; memory stack use!
ADD HL,SP ; stack
PUSH HL ;  ¤à¥á ¯à®£à ¬¬ë .readProcedure
LD DE,.switchProcedure ; ¯¥à¥­¥á⨠¯à®£à ¬¬ã ­  á⥪
EX DE,HL
LD BC,.switchProcedure.size
LDIR
RET
; ¯à®æ¥¤ãà , ¯¥à¥­®á¨¬ ï ­  á⥪ ¤«ï ¢ë§®¢  ¯à¥à뢠­¨ï ¯®«ì§®¢ â¥«ï ¨§ SLOT0
; ®áâ®à®¦­¥¥ á PUSH, ¥á«¨ ­ ¤® ¬­®£®, ⮠㢥«¨ç¨¢ © .stackDepth
.switchProcedure:
DEC DE
POP HL
LD (HL),E
INC HL
LD (HL),D
LD C,SLOT0
IN B,(C)
POP HL
PUSH BC
OUT (C),A
XOR A
OUT (SYS_PORT.RAM),A
.patch EQU $+1-.switchProcedure
CALL .JPHL
DI
XOR A
OUT (SYS_PORT.ROM),A
POP BC
OUT (C),B
RET
.JPHL: JP (HL)
.stackDepth EQU 32 ; à ááâ®ï­¨¥ ®â ª®­æ  ¯à®æ¥¤ãàë ¤® ¢¥à設ë á⥪ .
.switchProcedure.size EQU $-.switchProcedure
ENDIF
;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
; ==== POST PROCs ================= ; ==== POST PROCs =================
MODULE POST_TEST MODULE POST_TEST
@ -938,7 +1086,7 @@ DCP_DATA: INCLUDE 'DCP.ASM'
; #::::::::::::::::::::::::::::::::::#\ ; #::::::::::::::::::::::::::::::::::#\
; ####################################\ ; ####################################\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ZG_ADRESS: INCLUDE 'FONT.ASM' ZG_ADDRESS: INCLUDE 'FONT.ASM'
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;

View File

@ -36,7 +36,7 @@ CMOS_EMU_RD:
LD E,SYS_PAGE LD E,SYS_PAGE
OUT (C),E OUT (C),E
LD E,D LD E,D
LD D,#FF LD D, high SYS_PAGE.CMOS_EMULATOR
LD A,(DE) LD A,(DE)
OUT (C),B OUT (C),B

View File

@ -860,7 +860,7 @@ LP_BEG_P:
; program init registers ; program init registers
; for low printer & save ; for low printer & save
WIN_GET_ZG: ; DE -  ¤à¥á ªã¤  ¯¥à¥á« âì ä®­â WIN_GET_ZG: ; DE -  ¤à¥á ªã¤  ¯¥à¥á« âì ä®­â
LD HL,ZG_ADRESS LD HL,ZG_ADDRESS
LD BC,#0800 LD BC,#0800
LDIR LDIR
AND A AND A

View File

@ -159,7 +159,7 @@ INIT_SYS_ALL:
LD (HL),0 LD (HL),0
LDIR LDIR
LD DE,ZG_ADRESS ;  ¤à¥á §­ ª®£¥­¥à â®à  LD DE,ZG_ADDRESS ;  ¤à¥á §­ ª®£¥­¥à â®à 
LD (SYS_PAGE.WIN_ZG-#4000),DE LD (SYS_PAGE.WIN_ZG-#4000),DE
; ;
;-----------[new code start]------------ ; !!!!! ¯®á¬®âà¥âì-¯à¨ç¥á âì ;-----------[new code start]------------ ; !!!!! ¯®á¬®âà¥âì-¯à¨ç¥á âì

View File

@ -16,29 +16,29 @@ Check_Sum:
;!TODO ¯à¨ªàãâ¨âì ª ROM.BIOS ;!TODO ¯à¨ªàãâ¨âì ª ROM.BIOS
;----------------[int]------------------ ;----------------[int]------------------
BLOCK #38-$,#FF BLOCK #38-$,#FF
INT: PUSH BC ; INT: PUSH BC
PUSH AF ; PUSH AF
LD C,SLOT3 ; LD C,SLOT3
IN B,(C) ; IN B,(C)
LD A,SYS_PAGE ; LD A,SYS_PAGE
OUT (C),A ; OUT (C),A
LD A,(SYS_PAGE.INT_ID) ; LD A,(SYS_PAGE.INT_ID)
CP #AA ; CP #AA
JR Z,YESINT ; JR Z,YESINT
OUT (C),B ; OUT (C),B
JR NOINT ; JR NOINT
YESINT: PUSH HL ; YESINT: PUSH HL
LD HL,(SYS_PAGE.INT_ADRESS) ; LD HL,(SYS_PAGE.INT_ADRESS)
LD A,H ; LD A,H
OR L ; OR L
LD A,(SYS_PAGE.INT_PAGE) ; LD A,(SYS_PAGE.INT_PAGE)
OUT (C),B ; OUT (C),B
CALL NZ,EXTINT ; CALL NZ,EXTINT
POP HL ; POP HL
NOINT: POP AF ; NOINT: POP AF
POP BC ; POP BC
EI EI
RETI RETI
;--------------------------------------- ;---------------------------------------
@ -48,41 +48,97 @@ NOINT: POP AF
NMI: RETN NMI: RETN
;--------------------------------------- ;---------------------------------------
;!FIXIT ¯¥à¥­¥á⨠¢ ROM.BIOS ¨ ᤥ« âì ; ;!FIXIT ¯¥à¥­¥á⨠¢ ROM.BIOS ¨ ᤥ« âì
; â ª, ç⮡ ¬®£«  ¯à ¢¨«ì­® ¯à룠âì ¢ ; ; â ª, ç⮡ ¬®£«  ¯à ¢¨«ì­® ¯à룠âì ¢
; «î¡ë¥ á«®âë ¨ à ¡®â âì á DSS ; ; «î¡ë¥ á«®âë ¨ à ¡®â âì á DSS
;----------------[int]------------------ ; ;----------------[int]------------------
EXTINT: OR A ; EXTINT: OR A
RET Z ; RET Z
;LD C,SLOT1 ; ;LD C,SLOT1
BIT 7,H ; BIT 7,H
JR Z,.L2 ; JR Z,.L2
LD C,SLOT2 ; LD C,SLOT2
BIT 6,H ; BIT 6,H
JR Z,.L1 ; JR Z,.L1
LD C,SLOT3 ; LD C,SLOT3
.L1: IN B,(C) ; .L1: IN B,(C)
PUSH BC ; PUSH BC
OUT (C),A ; OUT (C),A
CALL JPHL ; CALL .JPHL
POP BC ; POP BC
OUT (C),B ; OUT (C),B
RET ; RET
; ¯à®¢¥àª  ­  ­ã«¥¢®© á«®â ; ; ¯à®¢¥àª  ­  ­ã«¥¢®© á«®â
.L2: BIT 6,H ; .L2: BIT 6,H
LD C,SLOT1 ; LD C,SLOT1
JR NZ,.L1 ; ¯à®¤®«¦ ¥¬ ¥á«¨ ­¥­ã«¥¢®© á«®â ; JR NZ,.L1 ; ¯à®¤®«¦ ¥¬ ¥á«¨ ­¥­ã«¥¢®© á«®â
; ‚Ž’ ’“’ ŒŽ†<C5BD>Ž <E280B9>ˆœ <20><>Ž…„“<E2809E>“ „‹Ÿ <20>Ž„<E28099>ŽŠˆ <E28098><EFBFBD>ˆ SLOT0 ˆ ; ; ‚Ž’ ’“’ ŒŽ†<C5BD>Ž <E280B9>ˆœ <20><>Ž…„“<E2809E>“ „‹Ÿ <20>Ž„<E28099>ŽŠˆ <E28098><EFBFBD>ˆ SLOT0 ˆ
; <20><EFBFBD>…•Ž„ <20>Ž <20><><EFBFBD><E2809A>ˆž Ž<><C5BD><EFBFBD>ŽˆŠ <20>Žœ‡ŽŸ —…<E28094>…‡ ¯à®æ¥¤ãàã ­  áâíª, ­ ¯à¨¬¥à ; ; <20><EFBFBD>…•Ž„ <20>Ž <20><><EFBFBD><E2809A>ˆž Ž<><C5BD><EFBFBD>ŽˆŠ <20>Žœ‡ŽŸ —…<E28094>…‡ ¯à®æ¥¤ãàã ­  áâíª, ­ ¯à¨¬¥à
SCF
RET
JPHL: JP (HL) ; IF TEST_INT
; LD HL,-.stackDepth - .switchProcedure.size + .patch+2
; ADD HL,SP
; PUSH HL
; LD HL,-.stackDepth - .switchProcedure.size ; memory stack use!
; ADD HL,SP ; stack
; PUSH HL ;  ¤à¥á ¯à®£à ¬¬ë .readProcedure
; LD DE,.switchProcedure ; ¯¥à¥­¥á⨠¯à®£à ¬¬ã ­  á⥪
; EX DE,HL
; LD BC,.switchProcedure.size
; LDIR
; RET
; ; ¯à®æ¥¤ãà , ¯¥à¥­®á¨¬ ï ­  á⥪ ¤«ï ¢ë§®¢  ¯à¥à뢠­¨ï ¯®«ì§®¢ â¥«ï ¨§ SLOT0
; ; ®áâ®à®¦­¥¥ á PUSH, ¥á«¨ ­ ¤® ¬­®£®, ⮠㢥«¨ç¨¢ © .stackDepth
; .switchProcedure:
; DEC DE
; POP HL
; LD (HL),E
; INC HL
; LD (HL),D
; LD C,SLOT0
; IN B,(C)
; PUSH BC
; OUT (C),A
; XOR A
; OUT (SYS_PORT.RAM),A
; .patch EQU $+1-.switchProcedure
; CALL .JPHL
; DI
; XOR A
; OUT (SYS_PORT.ROM),A
; POP BC
; OUT (C),B
; RET
; .JPHL: JP (HL)
; .stackDepth EQU 32 ; à ááâ®ï­¨¥ ®â ª®­æ  ¯à®æ¥¤ãàë ¤® ¢¥à設ë á⥪ .
; .switchProcedure.size EQU $-.switchProcedure
; ELSE
; SCF
; RET
; .JPHL: JP (HL)
; ENDIF
;--------------------------------------- ;---------------------------------------
/*
*/
; ;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; ; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;

View File

@ -2,7 +2,7 @@
;---------[All shared defines]----------\/ \/ ;---------[All shared defines]----------\/ \/
DEFINE DEBUG 1;| ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥ DEFINE DEBUG 1;| ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥
DEFINE NEW_FEATURE 0;| /\ ; !TODO ¯ã­ªâë ¢ á¥â ¯ DEFINE NEW_FEATURE 0;| /\ ; !TODO ¯ã­ªâë ¢ á¥â ¯
DEFINE SET_NEWdcp 1;| \/ \/ ; !FIXIT â¥áâ ­®¢®£® dcp_init, ¯®ª  ­¥ £®â®¢  â ¡«¨æ  ¯®à⮢ DEFINE TEST_INT 1;| \/ \/ ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ â¥«ì᪮£® INT
DEFINE PACKED_MAIN 0;| | ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®? DEFINE PACKED_MAIN 0;| | ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®?
DEFINE SP2000_ConfID #FEFF;| ; DEFINE SP2000_ConfID #FEFF;| ;
DEFINE IDE_Optimization 1;| ; á«¥£ª  ®¯â¨¬¨§¨àã¥â ­¥ª®â®àë¥ ¯à®æ¥¤ãàë à ¡®âë á HDD DEFINE IDE_Optimization 1;| ; á«¥£ª  ®¯â¨¬¨§¨àã¥â ­¥ª®â®àë¥ ¯à®æ¥¤ãàë à ¡®âë á HDD