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
; INTERUPT Point
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
RETI
@ -81,10 +110,11 @@ RST38:
;=======================================
IFN TEST_INT
_mInfoALIGN #10,0
;TABLE_X EQU #A0 ; any adress < #C0 with mask %xxxx0000
; BLOCK TABLE_X-$
TABLE_X: ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
; any adress < #C0 with mask %xxxx0000
; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
TABLE_X:
.v0: DB 00101000b ; "0"
.v1: DB 10111101b ; "1"
.v2: DB 00110010b ; "2"
@ -101,7 +131,13 @@ TABLE_X: ; ⠡
.vD: DB 10110000b ; "D"
.vE: DB 01100010b ; "E"
.vF: DB 01100011b ; "F"
ENDIF
;=======================================
;
;
;=======================================
IFN TEST_INT
RESTARTS EQU #FFE0 ; !FIXIT ¢ë­¥á⨠¢ SP2000.inc
GLOBAL_RESET:
DI
@ -117,16 +153,15 @@ GLOBAL_RESET:
INC DE
DJNZ .compare
JP RESTARTS
ENDIF
;=======================================
_mInfoBLOCK #66-$,0
NMI_Point:
; १¥à¢ 3 ¡ ©â  ¤«ï ª®¬ ­¤ë JP
;NOP
;NOP
;NOP
RETN
;=======================================
;SET_BIOS_TO_RAM: ; ¯à®£à ¬¬  à ¡®â ¥â ­   ¤à¥á¥ 0C000h
@ -196,24 +231,56 @@ BoardID:
; BLOCK #100-$,0
; 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
;-----[¯¥à¥å¢ â RESET ­¥ á®áâ®ï«áï]-----
;=======================================
IF TEST_INT
_mInfoALIGN #10,0
; any adress < #C0 with mask %xxxx0000
; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
TABLE_X: ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
.v0: DB 00101000b ; "0"
.v1: DB 10111101b ; "1"
.v2: DB 00110010b ; "2"
.v3: DB 00110100b ; "3"
.v4: DB 10100101b ; "4"
.v5: DB 01100100b ; "5"
.v6: DB 01100000b ; "6"
.v7: DB 00111101b ; "7"
.v8: DB 00100000b ; "8"
.v9: DB 00100100b ; "9"
.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:
; á⥪ ¥éñ ­¥ ¨á¯®«ì§ã¥¬!!!
LD SP,IX ; á®åà ­¨âì §­ ç¥­¨¥ ¯¥à¥¤ ­­®¥ § £àã§ç¨ª®¬ ª®­äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
@ -249,6 +316,87 @@ NO_RESTART:
; 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 =================
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
OUT (C),E
LD E,D
LD D,#FF
LD D, high SYS_PAGE.CMOS_EMULATOR
LD A,(DE)
OUT (C),B

View File

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

View File

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

View File

@ -16,29 +16,29 @@ Check_Sum:
;!TODO ¯à¨ªàãâ¨âì ª ROM.BIOS
;----------------[int]------------------
BLOCK #38-$,#FF
INT: PUSH BC
PUSH AF
; INT: PUSH BC
; PUSH AF
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
; 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
CALL NZ,EXTINT
POP HL
NOINT: POP AF
POP BC
; 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
; CALL NZ,EXTINT
; POP HL
; NOINT: POP AF
; POP BC
EI
RETI
;---------------------------------------
@ -48,41 +48,97 @@ NOINT: POP AF
NMI: RETN
;---------------------------------------
;!FIXIT ¯¥à¥­¥á⨠¢ ROM.BIOS ¨ ᤥ« âì
; â ª, ç⮡ ¬®£«  ¯à ¢¨«ì­® ¯à룠âì ¢
; «î¡ë¥ á«®âë ¨ à ¡®â âì á DSS
;----------------[int]------------------
EXTINT: OR A
RET Z
; ;!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
; ;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 ; ¯à®¤®«¦ ¥¬ ¥á«¨ ­¥­ã«¥¢®© á«®â
; ‚Ž’ ’“’ ŒŽ†<C5BD>Ž <E280B9>ˆœ <20><>Ž…„“<E2809E>“ „‹Ÿ <20>Ž„<E28099>ŽŠˆ <E28098><EFBFBD>ˆ SLOT0 ˆ
; <20><EFBFBD>…•Ž„ <20>Ž <20><><EFBFBD><E2809A>ˆž Ž<><C5BD><EFBFBD>ŽˆŠ <20>Žœ‡ŽŸ —…<E28094>…‡ ¯à®æ¥¤ãàã ­  áâíª, ­ ¯à¨¬¥à
SCF
RET
JPHL: JP (HL)
; .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 ; ¯à®¤®«¦ ¥¬ ¥á«¨ ­¥­ã«¥¢®© á«®â
; ; ‚Ž’ ’“’ ŒŽ†<C5BD>Ž <E280B9>ˆœ <20><>Ž…„“<E2809E>“ „‹Ÿ <20>Ž„<E28099>ŽŠˆ <E28098><EFBFBD>ˆ SLOT0 ˆ
; ; <20><EFBFBD>…•Ž„ <20>Ž <20><><EFBFBD><E2809A>ˆž Ž<><C5BD><EFBFBD>ŽˆŠ <20>Žœ‡ŽŸ —…<E28094>…‡ ¯à®æ¥¤ãàã ­  áâíª, ­ ¯à¨¬¥à
; 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_ ;

View File

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