From 6a170dff30c6c07336b588b42870a121bdc6b0cb Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 20 Jun 2023 01:27:50 +1000 Subject: [PATCH] ZX-EXP to BIOS adaptation --- Shared_Includes | 2 +- src/bios/BIOS.asm | 3 + src/bios/Test/IDE_BIOS.as | 346 --- src/bios/backup/EXP.as | 2252 ----------------- src/bios/backup/EXP_FN.as | 841 ------ src/bios/backup/EXP_HDD.as | 824 ------ src/bios/backup/EXTENDED.as | 474 ---- src/bios/backup/ROM.as | 135 - src/bios/exp/DCP.ASM | 283 +-- src/bios/exp/EXP.asm | 312 +-- src/bios/exp/EXTENDED/HDD_DRIVER_6.asm | 2 +- src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm | 4 +- src/bios/exp/FUNC_SERVICE.asm | 4 +- src/bios/exp/ZX_MENU.ASM | 24 +- src/bios/exp/ZX_MODE.ASM | 22 +- src/bios/old_files/DCP_PAGE.bin | Bin 16384 -> 0 bytes src/bios/old_files/EXP_DCP.LZ | Bin 5108 -> 0 bytes src/bios/old_files/EXP_DCP2.asm | 460 ---- src/bios/old_files/EXP_DCP_GENERATOR.ASM | 9 - .../old_files/EXP_DCP_TABLE_GENERATED.ASM | 639 ----- src/bios/old_files/EXP_DCP_UNPACKER.asm | 110 - src/bios/old_files/FONT.FNT | Bin 2048 -> 0 bytes src/bios/old_files/SP_EXP2_dasm.asm | 565 ----- src/bios/rom/ROM.asm | 407 ++- src/bios/rom/SETUP/KEY.asm | 2 +- src/bios/rom/SETUP/MAIN.asm | 94 +- src/bios/rom/SETUP/SETTINGS.asm | 26 +- src/bios/rom/SETUP/VIDEO_IO.asm | 42 +- src/bios/shared/CompMacro.asm | 31 +- src/bios/shared/DEFINES.INC | 2 +- 30 files changed, 710 insertions(+), 7205 deletions(-) delete mode 100644 src/bios/Test/IDE_BIOS.as delete mode 100644 src/bios/backup/EXP.as delete mode 100644 src/bios/backup/EXP_FN.as delete mode 100644 src/bios/backup/EXP_HDD.as delete mode 100644 src/bios/backup/EXTENDED.as delete mode 100644 src/bios/backup/ROM.as delete mode 100644 src/bios/old_files/DCP_PAGE.bin delete mode 100644 src/bios/old_files/EXP_DCP.LZ delete mode 100644 src/bios/old_files/EXP_DCP2.asm delete mode 100644 src/bios/old_files/EXP_DCP_GENERATOR.ASM delete mode 100644 src/bios/old_files/EXP_DCP_TABLE_GENERATED.ASM delete mode 100644 src/bios/old_files/EXP_DCP_UNPACKER.asm delete mode 100644 src/bios/old_files/FONT.FNT delete mode 100644 src/bios/old_files/SP_EXP2_dasm.asm diff --git a/Shared_Includes b/Shared_Includes index 6e27011..80b60f7 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 6e27011b6259b0256ce65d91a53ef1185223eafa +Subproject commit 80b60f7294ce3eee958a0c4e9a6f29577cee496f diff --git a/src/bios/BIOS.asm b/src/bios/BIOS.asm index 6f9bcfc..0563473 100644 --- a/src/bios/BIOS.asm +++ b/src/bios/BIOS.asm @@ -67,6 +67,7 @@ ;-----------------[EXP]----------------- MMU 0 e, 8 ; страница 8 в банку 0 и проверка на границы ORG COMPILE_ADDR.EXP + DEFINE+ IsInBIOS 1 OUTPUT 'Build/Bin/EXP.BIN' ShowInfo 'EXP block Start', 0 ; !!!!! test INCLUDE 'src/bios/EXP/EXP.asm' @@ -80,11 +81,13 @@ ;-----------------[ROM]----------------- MMU 0 e, 0 ; страница 0 в банку 0 и проверка на границы. ORG ROM_MAP.ROM + DEFINE+ IsInBIOS 0 OUTPUT 'Build/Bin/ROM.BIN' ShowInfo 'ROM block Start', 0 ; !!!!! test INCLUDE 'src/bios/ROM/ROM.asm' ShowInfo 'ROM block End', 0 ; !!!!! test OUTEND + UNDEFINE IsInBIOS ;--------------------------------------- ; diff --git a/src/bios/Test/IDE_BIOS.as b/src/bios/Test/IDE_BIOS.as deleted file mode 100644 index c972595..0000000 --- a/src/bios/Test/IDE_BIOS.as +++ /dev/null @@ -1,346 +0,0 @@ - -;======================================================== -;55H READH LOAD SECTORS -;56H WRITEH SAVE SECTORS -;57H VERIFYH VERIFY SECTORS - -Y_PORT EQU 089H -;Write -HDW_COM EQU 4153H ;1F7H Command -HDW_DRV EQU 4152H ;1F6H Drive Control - -HDW_CLH EQU 0155H ;1F5H Cylinder High -HDW_CLL EQU 0154H ;1F4H Cylinder Low -HDW_SEC EQU 0153H ;1F3H Sector -HDW_CNT EQU 0152H ;1F2H Counter -HDW_ERR EQU 0151H ;1F1H Error -HDW_DAT EQU 0150H ;1F0H Data -;Read -HDR_CTL EQU 4053H ;1F7H Status (Control) -HDR_DRV EQU 4052H ;1F6H Drive Control - -HDR_CLH EQU 0055H ;1F5H Cylinder High -HDR_CLL EQU 0054H ;1F4H Cylinder Low -HDR_SEC EQU 0053H ;1F3H Sector -HDR_CNT EQU 0052H ;1F2H Counter -HDR_ERR EQU 0051H ;1F1H Error -HDR_DAT EQU 0050H ;1F0H Data - -BSY EQU 7 -RDY EQU 6 -DRQ EQU 3 -ERR EQU 0 - -;EQU FOR IY+ -DRVHD_H EQU 0 -SC_PT_H EQU 1 -HEADS_H EQU 2 -CYL_L_H EQU 3 -CYL_H_H EQU 4 -SPCLL_H EQU 5 -SPCLH_H EQU 6 - -IDE0 EQU 0C1C0H -IDE1 EQU 0C1C8H - -;IDE0 DEFB #FF ;DRIVE/HEAD REGISTER ;00 -; DEFB #FF ;SECTORS PER TRACK ;01 -; DEFB #FF ;HEADS ;02 -; DEFB #FF ;CYLINDERS LOW ;03 -; DEFB #FF ;CYLINDERS HIGH ;04 -; DEFB #FF ;SECTOR PER CYLINDER LOW ;05 -; DEFB #FF ;SECTOR PER CYLINDER HIGH ;06 -; DEFB #FF ;RESERVED ;07 - -;IDE1 DEFB #FF ;DRIVE/HEAD REGISTER ;00 -; DEFB #FF ;SECTORS PER TRACK ;01 -; DEFB #FF ;HEADS ;02 -; DEFB #FF ;CYLINDERS LOW ;03 -; DEFB #FF ;CYLINDERS HIGH ;04 -; DEFB #FF ;SECTOR PER CYLINDER LOW ;05 -; DEFB #FF ;SECTOR PER CYLINDER HIGH ;06 -; DEFB #FF ;RESERVED ;07 - -;HL:IX - SECTOR -; DE - ADDRESS -; B - SECTORS - -;READ SECTOR(S) -READH: PUSH IY - EXX - LD C,Y_PORT - IN B,(C) - PUSH BC - LD E,0C0H - OUT (C),E - EXX - CALL RDS000 - EXX - POP BC - OUT (C),B - EXX - POP IY - RET NC - LD A,4 ;NOT READY - RET - -;READ SECTOR(S) -RDS000: AND 1 - LD IY,IDE0 - JR Z,RDS001 - LD IY,IDE1 -RDS001: EXX - LD DE,0C040H - LD BC,HDR_CTL - CALL WAITPRT - EXX - RET C - PUSH DE - CALL PRESET - POP HL - LD BC,HDW_COM - LD A,020H ;READ WITH RETRY - OUT (C),A -;SAVE HL! -RDS002: EXX - LD DE,08908H ;WAIT BUSY=0 & DRQ=1 & ERR=0 - LD BC,HDR_CTL - CALL WAITPRT - EXX - RET C - LD BC,HDR_DAT - INIR - INIR -; - LD A,H - OR L - JR NZ,W44 - LD HL,0C000H -W44 -; - LD BC,HDR_CTL - IN A,(C) - BIT DRQ,A - JR NZ,RDS002 - XOR A - RET - -;HL:IX - SECTOR -; DE - ADDRESS -; B - SECTORS - -;WRITE SECTOR(S) -WRITEH: PUSH IY - EXX - LD C,Y_PORT - IN B,(C) - PUSH BC - LD E,0C0H - OUT (C),E - EXX - CALL WRS000 - EXX - POP BC - OUT (C),B - EXX - POP IY - RET NC - LD A,4 ;NOT READY - RET - -;WRITE SECTOR(S) -WRS000: AND 1 - LD IY,IDE0 - JR Z,WRS001 - LD IY,IDE1 -WRS001: EXX - LD DE,0C040H - LD BC,HDR_CTL - CALL WAITPRT - EXX - RET C - PUSH DE - CALL PRESET - POP HL - LD BC,HDW_COM - LD A,030H ;WRITE WITH RETRY - OUT (C),A -;SAVE HL! -WRS002: EXX - LD DE,08908H ;WAIT BUSY=0 & DRQ=1 & ERR=0 - LD BC,HDR_CTL - CALL WAITPRT - EXX - RET C - LD BC,HDW_DAT - OTIR - OTIR -; - LD A,H - OR L - JR NZ,W33 - LD HL,0C000H -W33: -; - LD BC,HDR_CTL - IN A,(C) - BIT DRQ,A - JR NZ,WRS002 - XOR A - RET - -;HL:IX - SECTOR -; B - SECTORS - -;VERIFY SECTOR(S) -VERIFYH: - PUSH IY - EXX - LD C,Y_PORT - IN B,(C) - PUSH BC - LD E,0C0H - OUT (C),E - EXX - CALL VRS000 - EXX - POP BC - OUT (C),B - EXX - POP IY - RET NC - LD A,4 ;NOT READY - RET - -;VERIFY SECTOR(S) -VRS000: AND 1 - LD IY,IDE0 - JR Z,VRS001 - LD IY,IDE1 -VRS001: EXX - LD DE,0C040H - LD BC,HDR_CTL - CALL WAITPRT - EXX - RET C - PUSH DE - CALL PRESET - POP HL - LD BC,HDW_COM - LD A,040H ;VERIFY WITH RETRY - OUT (C),A -VRS002: LD BC,HDR_CTL - IN A,(C) - BIT ERR,A - JR Z,VRS003 - SCF - RET -VRS003: LD DE,08100H ;WAIT BUSY=0 & ERR=0 - LD BC,HDR_CTL - CALL WAITPRT - RET C - XOR A - RET - -; HL:IX - LBA SECTOR -; B - SECTOR COUNTER - -PRESET: LD A,B - LD BC,HDW_CNT - OUT (C),A - IN A,(0E2H) - EX AF,AF' - LD A,0FEH - OUT (0E2H),A - LD A,(IY+DRVHD_H) - LD BC,HDW_DRV - OUT (C),A - BIT 6,A - LD E,LX - LD D,HX - CALL Z,LBA_CHS - LD BC,HDW_SEC - OUT (C),E ;LBA 0..7 - LD BC,HDW_CLL - OUT (C),D ;LBA 8..15 - LD BC,HDW_CLH - OUT (C),L ;LBA 16..23 - LD BC,HDW_DRV - DEC B - IN A,(C) - AND 0F0H - OR H ;LBA 24..27 - INC B - OUT (C),A - EX AF,AF' - OUT (0E2H),A - AND A - RET - -; HL:DE - SECTOR OFFSET - -LBA_CHS: - LD C,(IY+SPCLL_H) - LD B,(IY+SPCLH_H) -; HL:DE / BC => DE:IX HL-OSTATOK -DIV32X: LD HX,D - LD LX,E - EX DE,HL - LD HL,0 - LD A,020H -DIV011: ADD IX,IX - EX DE,HL - ADC HL,HL - EX DE,HL - ADC HL,HL - SBC HL,BC - JR NC,DIV012 - ADD HL,BC - DEC A - JR NZ,DIV011 - JR DIV014 -DIV012: INC IX - DEC A - JR NZ,DIV011 -DIV014: LD E,(IY+SC_PT_H) - LD D,0 - XOR A -CHS005: INC A - SBC HL,DE - JR NC,CHS005 - ADD HL,DE - DEC A - LD H,A - LD E,L - INC E - LD D,LX - LD A,HX - LD L,A - RET - -; D - MASK -; E - PATTERN -; BC - PORT - -WAITPRT: - LD HL,0000H -WAITP0: IN A,(C) - CP 0FFH - JR Z,WAITP1 - AND D - CP E - JR NZ,WAITP2 - AND A - RET - -WAITP2: DEC HL - LD A,L - OR H - JP NZ,WAITP0 -WAITP1: SCF - RET - -;======================================================= - - - diff --git a/src/bios/backup/EXP.as b/src/bios/backup/EXP.as deleted file mode 100644 index 8e990b8..0000000 --- a/src/bios/backup/EXP.as +++ /dev/null @@ -1,2252 +0,0 @@ - -; -;************************************************************* -; -; EXPANSION VER 3.00 (C) Peters Plus Ltd. -; -;************************************************************* - -;*************************************** -; DEVICE ZXSPECTRUM4096 ; модель с 4 метрами памяти -; MMU 0 e, 0 ; нулевая страница в банку 0 и проверка на границы -; OUTPUT './Build/EXP.BIN' - -;*************************************** - -; ORG 0 -; DISP 0 - -;SPRIN2 EQU 2 ; 1 - включение Sprinter-1 первой прошивкой -; 2 - включение Sprinter-2 первой прошивкой - -; INCLUDE '../shared/SPRINT00.asm' ; константы, макросы.. -; INCLUDE 'EXP_VERSION.inc' - -;KEMPSTON.JOY_DOS EQU 0FFh - -;*************************************** -;*********** BEGIN EXPANSION *********** -;*************************************** -;A_0000: ; Вход по RESET -EXP_START: - JP GLOBAL_RESET -; DB 0,0 - -;--------------------------------------- -ROM_NUMBER: -.part1: DW MotherBoardID ; MotherBoardID -.part2: DB 0 -;--------------------------------------- - -;--------------------------------------- -; BoardID: -; .start: WORD BoardID_start ; BoardID_start -; .end: WORD BoardID_end ; BoardID_end -;--------------------------------------- - -;======================================= - BLOCK 8-$,0 ; first on/off EXPANSION -;программа для вызова BIOS через RST8 из RAM0 -; -EXP_FNS_2_RET: - PUSH AF - LD A,ROM.EXT - OUT (SYS_PORT.OFF),A - POP AF - JR RST_18_1 -;======================================= - -;======================================= - BLOCK #10-$,0 ; DSS ??? -RST_10: -; JR RST10 -;======================================= - -;======================================= - BLOCK #18-$,0 -; RST18h - MAIN BIOS functions -; - JP EXP_FNS_RST18 ; !TEST new_api -RST_18_1: - CALL EXP_FNS_RST18 ; !TEST new_api - JR EXP_FNS_2_RET - -;======================================= - -;======================================= - BLOCK #20-$,0 -RST_20: -;======================================= - -;======================================= - BLOCK #28-$,0 -RST_28: -;======================================= - -;======================================= - BLOCK #30-$,0 -RST_30: -;======================================= - -;======================================= - BLOCK #38-$,0 -; INTERUPT Point -; -RST38: - EI - RETI - -;RST10: -; CALL_48 10h -; RET -;======================================= - -;======================================= - _mInfoBLOCK #66-$,0 - -NMI_Point: - RETN ; резерв 3 байта для команды JP - NOP - -;======================================= - -;SET_BIOS_TO_RAM: ; программа работает на адресе 0C000h -; -; LD SP,0C0C0H -; LD A,0E0H -; LD C,PAGE3 -; IN B,(C) -; CALL SET_ROM_PAGES+0C000H -; JP NO_SUMX_EQ - -;********************************** - -;BEEP: -; PUSH HL -; PUSH DE -; PUSH BC -; PUSH AF -; PUSH IX -; -; LD HL,BEEP_RET -; PUSH HL -; LD HL,SW_ROM -; PUSH HL -; LD HL,03B5h -; PUSH HL -; LD HL,200 -; LD D,H -; LD E,5 -; JP SW_ROM -;BEEP_RET: -; -; POP IX -; POP AF -; POP BC -; POP DE -; POP HL -; RET - -;======================================= - _mInfoALIGN #10,0 -;TABLE_X EQU #A0 ; any adress < #C0 with mask %xxxx0000 -; BLOCK TABLE_X-$ -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" -;======================================= - -;======================================= -; BLOCK MEM_MAP.ID_Version-$,0 ;#C0-$,0 -ID_Version: - dw bitstream_ver_hex ; Version of bitstream hex - -ID_SPRINTER_length: - DB ID_SPRINTER.LENGTH - -ID_SPRINTER: - DB 'Hardware v' -.bitstream_ver: - DB bitstream_ver_string,0 - DB 'Sprinter',0 - DB 0 -.LENGTH EQU $-ID_SPRINTER - -; Check for max length of string - ASSERT ID_SPRINTER.LENGTH < #20, 'ERROR! ID String is to long!' -;======================================= - - -; BLOCK #FC-$,0 -BoardID: -.start: WORD BoardID_start ; BoardID_start -.end: WORD BoardID_end ; BoardID_end - -; ;======================================= -; 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.length -.compare: - LD A,(DE) - CP (HL) - JR NZ,NO_RESTART - INC HL - INC DE - DJNZ .compare - JP RESTARTS - -;********************************** -; программа, которая будучи размещенной в #40 странице, -; с адреса RESTARTS, перехватывает RESET -; ; Сделать заготовку с DISP-ENT на будущее !!!!! -RESTARTS_PROG: ; !TODO LDConf перехват ресета на любой конфе после hardreset - LD HL,RESTARTS ; 3 - LD B,16 ; 2 -.loop: - LD (HL),0 ; 2 - INC HL ; 1 - DJNZ .loop ; 2 - NOP ; 1 - NOP ; 1 - ; LD A,1 ; 2 - ; OUT (SLOT3),A ; 2 -; ; = 16 bytes -.length EQU $-RESTARTS_PROG -;********************************** - -;------------[Setup Starter]------------ - MODULE Setup_Starter -; программа, размещаемая по адресу 0C000h -; для запуска Setup -Start: - DISP COMPILE_ADDR.SETUP_STARTER -Exec: - LD A,CNF_0 + ROM.EXPANSION - OUT (SYS_PORT.ON),A - - LD HL,ROM_MAP.SETUP - LD DE,MEM_MAP.SETUP - LD BC,BLOCK_Setup.Length - LDIR - - LD A,CNF_0+ROM.EXT - OUT (SYS_PORT.ON),A - -;-----------[Check SPACE] - LD A,#FE ; !HARDCODE - LD BC,Port_All_Mode ; keyboard int & acc off - OUT (C),A - LD A,high ZXKeys.Line_7 - IN A,(ZXKeys) - CPL - AND 1 -; в регистре A передаётся нажата ли клавиша SPACE. -; потом проверяется в main.asm [space_check] -; и если нажата, то происходит игнор параметра -; "Быстрый старт ПЗУ" во время перезагрузки - EX AF,AF' - - LD A,#FF ; !HARDCODE - OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05) - - EX AF,AF' -;----------------------[] - DI - POP HL ; адрес возврата в EXP из SETUP - LD SP,#8000 ;!HARDCODE - PUSH HL - PUSH AF - JP SETUP_MAIN - ENT -Length EQU $-Setup_Starter.Start - ENDMODULE -;--------------------------------------- - - -;SYSTEM_ID_TXT: -; DB "NEW_BIOS" - - -;-----[перехват RESET не состоялся]----- -; -NO_RESTART: -; стек ещё не используем!!! - LD SP,IX ; сохранить значение переданное загрузчиком конфы (если старт после ресета) - -;*************************************** -; инициализация внутренних -; портов Z84C15 для POST-Tester-а -; - LD A,5 ; COM port for Printer OUT - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#62 - OUT (Z84.SIO.Ch_A.Ctrl),A - - LD A,#CF ; BITS I/O - OUT (Z84.PIO.Port_A.Command),A - XOR A - OUT (Z84.PIO.Port_A.Command),A - OUT (Z84.PIO.Port_A.Data),A ; PRINTER - PORT - all zeros - -;*************************************** -;-инициализация системных портов Z84C15- -; - LD BC,#FF*256 + Z84.SYS.Control - XOR A - OUT (C),A ; 0 register - waits - INC C - OUT (C),A ; set 0 Waits - - DEC C - - LD A,3 ; 3-rd register - Misc.Control Register - OUT (C),A - INC C - XOR A ; !FIXIT читать доку на Z84, выбрать занчение для A - LD A,1 ; !FIXIT читать доку на Z84, выбрать занчение для A - OUT (C),A ; enable CS0, disable CS1 -; no boundary set! -;********************************** -; - -; - xor a - out (BorderColor),a -; - -; -;********************************** -; ==== POST PROCs ================= - MODULE POST_TEST - -; ********************************* -; ===== Point 0 ======= -; ********************************* - - LD A,(TABLE_X.v0) ; высветить "0" ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A - -; ==== TEST RAM BUS ======== - -POST_1_RAM_BUS: - LD BC,0 - LD HL,#C000 - LD DE,#0055 - -.loop: - LD (HL),E - INC L - LD (HL),D - DEC L - LD A,(HL) - XOR E - OR C - LD C,A - INC L - LD A,(HL) - XOR D - OR B - LD B,A - DEC L - - DEC E - INC D - JR NZ,.loop - LD A,E - CPL - LD E,A - INC L - INC L - BIT 4,L - JR Z,.loop - - LD A,B - OR C - JR Z,POST_1_OK ; no errors - -; ERROR RAM BUS CODE 'X'X'X'X... - -.error: - LD HL,TABLE_X -.ERB_2: - BIT 0,C - JR Z,.ERB_1 - -; высветить номер ошибочного бита - LD A,(HL) - AND %11011111 ; с запятыми - OUT (Z84.PIO.Port_A.Data),A - -; пауза - LD DE,0 -.pause: - DEC DE - LD A,D - OR E - JR NZ,.pause - -; RRC BC -.ERB_1: - LD A,C - RRA - RR B - RR C - -; бесконечный цикл - INC L - LD A,L - AND #AF - LD L,A - JR .ERB_2 - -; ************************************************ -; ===== Point 1 ============== -; ************************************************ -POST_1_OK: - - LD A,(TABLE_X.v1) ; высветить "1" ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A - -; ===== TEST ADRESS BUS ====== -POST_2_ADRESS_BUS: - LD HL,#C000 - LD DE,#0000 -.fill_mem: ; заполнить память адресами - LD (HL),E - INC L - LD (HL),D - INC HL - INC DE - INC DE - BIT 7,H - JR NZ,.fill_mem - - DEC HL - DEC DE - DEC DE -.check_mem: ; проверить совпадение - LD A,(HL) - CP D - JR NZ,.error - DEC HL - LD A,(HL) - CP E - JR NZ,.error - DEC HL - DEC DE - DEC DE - LD A,H - CP 0BFh - JR NZ,.check_mem - JR POST_2_OK - -; ошибка адреса CODE: 'XXXX -.error: -.TSAB_4: - LD C,D - LD B,11011111b - LD IX,.TSAB_3 - JR OUT_C_BYTE ; вывести старший байт с запятой -.TSAB_3: - LD C,E - LD B,0FFh - LD IX,.TSAB_4 - JR OUT_C_BYTE ; вывести младший без запятой - -; ===== OUT BYTE PROGRAM ======= - -OUT_C_BYTE: - LD A,C - - RRCA - RRCA - RRCA - RRCA - - AND #0F - OR TABLE_X - LD L,A - LD H,0 - LD A,(HL) - AND B - OUT (Z84.PIO.Port_A.Data),A - - EXX - LD DE,0 -.LOOP_WTT2: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT2 - LD A,#FF - OUT (Z84.PIO.Port_A.Data),A -.LOOP_WTT21: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT21 - EXX - - LD A,C - AND #0F - OR TABLE_X - LD L,A - LD A,(HL) - OUT (Z84.PIO.Port_A.Data),A - - EXX - LD DE,0 -.LOOP_WTT3: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT3 - LD A,#FF - OUT (Z84.PIO.Port_A.Data),A -.LOOP_WTT31: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT31 - EXX - - JP (IX) - -; ************************************************ -; ===== Point 2 ========= -; ************************************************ - -POST_2_OK: - - LD A,(TABLE_X.v2) ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A ; вывести "2" - -; ===== INIT DCP ======== -POST_3_INIT_DCP: - LD HL,POST_3_OK ; INIT PORTS - JP DCP_INIT ; процедура инициализации с возвратом в (HL) -; ошибок нет - -; *********************************** -; ===== Point 3 ========= -; *********************************** - -POST_3_OK: - LD A,(TABLE_X.v3) ; вывести "3" ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A - -; ===== TEST RAM PAGES == - - IN A,(SLOT3) - EX AF,AF' ; запомнить - -POST_4_PAGES: - LD B,0 -.loop: - LD A,#FF - LD I,A - LD A,B - OUT (SLOT3),A - LD A,0 - LD I,A - IN A,(SLOT3) - CP B - JR NZ,.error ; если ошибка переключения Port-а - DJNZ .loop - - EX AF,AF' - OUT (SLOT3),A ; восстановить - JR POST_4_OK - -; *********************************** -; ERROR Port CODE 'XX -.error: - LD C,B - LD IX,.error_out_ret -.error_out_ret: - LD B,11011111b - JP OUT_C_BYTE - -; *********************************** -; ===== Point 4 ========= -; *********************************** - -POST_4_OK: - LD A,(TABLE_X.v4) ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A ; высветить "4" - -;= проверка чистоты шины данных Z84C15 = -POST_5_DATA_BUS: - LD B,0 -.loop: - IN A,(0) - CP #FF -; JR NZ,.error ;!!!!! посмотреть - DJNZ .loop - JR POST_5_OK - -; ERROR CODE '_'XX -.error: - LD C,A -.erb1: - LD IX,.erbr1 - LD B,%11011111 - JP OUT_C_BYTE -.erbr1: - LD A,%11011111 - OUT (Z84.PIO.Port_A.Data),A - - LD DE,0 -.LOOP_WTT4: - DEC DE - LD A,D - OR E - JR NZ,.LOOP_WTT4 - JR .erb1 - -; ********************************** -; ===== Point 5 ========= -; ********************************** - -POST_5_OK: - LD A,(TABLE_X.v5) ;rdlow-ok - OUT (Z84.PIO.Port_A.Data),A ; вывести "5" - -; ********************************** -; POST завершен -; ********************************** - ENDMODULE - - MODULE SET_CONFIG_ID - - IN A,(SLOT3) - EX AF,AF' ; SAVE PAGE3 - -;NO_SUMX_EQ: - - LD A,SYS_PAGE - OUT (SLOT3),A - -;-------------[Save IX:IY]-------------- -; Don't use IY before this point if it`s normal booting!!! - -;NO_NEW_BIOS: - - LD IX,0 - AND A - ADD IX,SP ; восстановить значение переданное загрузчиком конфы (если старт после ресета) -; -; В этом месте у нас IX:IY из Loader.asm -; - -/* -; Дотащили до сюда метку от лоадера -; пока никак не используется - - LD A,IYL - LD L,A - LD A,IYH - LD H,A - - LD BC,#0107 ; !!!!! сравнить с 0107h вынести референсом тут и в loader.asm - AND A ; если равно - прошла перезагрузка - SBC HL,BC - JR Z,set_config -*/ -;--------------------------------------- - LD HL,#FFFD ; !!!!! Sprinter-2 вынести референсом тут и в loader.asm - -set_config: - LD (SYS_PAGE.CONFIG_BYTE),HL ; сохранить номер прошивки -; LD HL,(SYS_PAGE.CONFIG_BYTE) ; взять номер прошивки в HL - - EX AF,AF' - OUT (SLOT3),A ; Restore SLOT3 - - ENDMODULE -;********************************* -; первая инициализация страниц: -; SLOT3=0, SLOT2=2, SLOT1=5, SLOT0=0 - - XOR A - OUT (RGADR),A - OUT (RGMOD),A - OUT (SLOT3),A - OUT (SLOT0),A - LD A,5 - OUT (SLOT1),A - LD A,2 - OUT (SLOT2),A - -;********************************* -; Don't use stack (SP) before this point if it`s normal booting!!! - LD SP,#BFFE ; Начало использования стека!!! - PUSH HL ; сохранить номер прошивки - - CALL PORTS_INIT ; инициализировать порты - CALL EMM.CheckColdInit ; инициализация памяти - - POP HL ; конфигурация - JR Reset_Handler.start -; ************************************* -; Считаем, что вход в SETUP всегда !!! -; ************************************* - -; LD A,H -; CP 0FFH -; JR NZ,NO_SETUP_1 -; LD A,L - -;-----[IF]----- - ; IF SPRIN2 = 2 -; CP 0FDH ; Конфигурация Sprinter-2 -PG_SP1 equ #EC -PG_SP2 equ #EE -PG_AY equ #EA - -; ELSE - -; ; CP #FE ; Конфигурация Sprinter-1 -; PG_SP1 equ #EE -; PG_SP2 equ #EC -; PG_AY equ #EA - -; ENDIF -;-------------- -; JR NZ,NO_SETUP_2 - - MODULE Reset_Handler -start: - IN A,(SLOT3) - push af -;----[перехват soft reset #EE port]----- -Check_EE_Port: - - LD A,Conf_port.RET_PORT - LD B,0 - LD C,BIOS.SET_PORTS - CALL @ToBIOS_3D13 ; переустановить внутр. порт #EE - LD A,B - AND A - jr z,Check_Spec_Page - - DI - OUT (SLOT3),A ; Set restart page - -.After_Hard_Rst: - - LD HL,(#FFF4) ; prog address - ld a,(#FFF0) ; PAGE0 - OUT (SLOT0),A - LD A,(#FFF1) ; PAGE1 - OUT (SLOT1),A - LD A,(#FFF2) ; PAGE2 - OUT (SLOT2),A - LD A,(#FFF3) ; PAGE3 - OUT (SLOT3),A - - jp (HL) -; -;--[перехват soft/hard reset #41 page]-- -Check_Spec_Page: - - LD A,Spec_Page - OUT (SLOT3),A - LD A,(#FFFE) - CP 'Z' - JR NZ,No_Reset_handlers - LD A,(#FFFF) - CP 'X' - JR NZ,No_Reset_handlers - - LD A,(#FFF7) - CP 'R' - JR NZ,Spec_Page_handler_OK - LD A,(#FFF8) - CP 'S' - JR NZ,Spec_Page_handler_OK - LD A,(#FFF9) - CP 'T' - JR NZ,Spec_Page_handler_OK - - XOR A - LD (#FFF7),A - - JR Check_EE_Port.After_Hard_Rst -;--------------------------------------- -No_Reset_handlers: -init_rom_address EQU #8200 ;!HARDCODE - - ld hl,init_zx_roms - ld de,init_rom_address - ld bc,init_zx_roms.length - ldir - - call init_rom_address - - LD HL,#C000 - LD DE,#C001 - LD BC,#3FFF - LD (HL),C - LDIR ; забить FF-ами - - LD HL,PROG_NO_ROM - LD DE,#C000 + #38 - LD BC,PROG_NO_ROM.size - LDIR - - LD HL,RAM_BIOS_PROG - LD DE,#C000 + #08 - LD BC,RAM_BIOS_PROG.Length - LDIR - -Spec_Page_handler_OK: - pop af - OUT (SLOT3),A - - ENDMODULE -;************************************** -; COPY BIOS ТО RAM ???? -;************************************** -; -;************************************** -; - MODULE Prepare_For_Setup - -Set_ALL_Mode: - LD A,#FF - LD BC,Port_All_Mode - OUT (C),A - -Set_Default_Screen: - CALL INT_DEF ; set default int - ld a,128+4 ; !HARDCODE - ld c,#F2 ; !HARDCODE FN_SYNC - RST #18 ; set default vsync - -Setup_to_RAM: - LD HL,Setup_Starter.Start - LD DE,COMPILE_ADDR.SETUP_STARTER - LD BC,Setup_Starter.Length - LDIR - -; на стек кладётся адрес возврата и дальше тащится всякими костылями, чтоб вернуться назад - CALL Setup_Starter.Exec ; #C000 - - JP ZX_SPECTRUM_MODE ; выход в режим zx spectrum - - ENDMODULE -;*********************************** -; Инициализация портов - -PORTS_INIT: - -; включить TURBO - - LD A,D_TBON+CNF_0 - OUT (SYS_PORT.ON),A - -; RESET to ISA - - LD BC,ISA_PORT - LD A,#FF - OUT (C),A -.isa_reset: - DEC A - JR NZ,.isa_reset - OUT (C),A - -; Инициализация последовательного порта клавиатуры - - LD A,0 - OUT (Z84.SIO.Ch_A.Ctrl),A - - LD A,1 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,0 ; 18H включение прерываний - OUT (Z84.SIO.Ch_A.Ctrl),A - - LD A,3 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#C1 - OUT (Z84.SIO.Ch_A.Ctrl),A - - LD A,4 - OUT (Z84.SIO.Ch_A.Ctrl),A -;------------------------------ ;!!!!! посмотреть -; ld a,5 - LD A,7 ; ????? 5/7 паритет? -;------------------------------ ;!!!!! посмотреть - OUT (Z84.SIO.Ch_A.Ctrl),A - - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#62 - OUT (Z84.SIO.Ch_A.Ctrl),A - -;--------[Clean keyboard buffer]-------- -.clean_kbd_buf: - IN A,(Z84.SIO.Ch_A.Ctrl) - BIT 0,A - jr z,.mouse - IN A,(Z84.SIO.Ch_A.Data) - jr .clean_kbd_buf -;--------------------------------------- -.mouse: -; Инициализация мыши - - LD A,0 ; for MOUSE - OUT (Z84.SIO.Ch_B.Ctrl),A - - LD A,1 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,0 - OUT (Z84.SIO.Ch_B.Ctrl),A - - LD A,3 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,#41 - OUT (Z84.SIO.Ch_B.Ctrl),A - - LD A,4 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,#44 - OUT (Z84.SIO.Ch_B.Ctrl),A - - LD A,5 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,#E0 - OUT (Z84.SIO.Ch_B.Ctrl),A - -; Инициализация таймера мыши - - LD A,85 ; for MOUSE - OUT (Z84.CTC.Ch_0),A - LD A,45 - OUT (Z84.CTC.Ch_0),A - -; Инициализация параллельного порта 1 (принтер) - -; для POST-Tester-а - -; LD A,0CFH ; BITS I/O -; OUT (Z84.PIO.Port_A.Command),A -; XOR A -; OUT (Z84.PIO.Port_A.Command),A ; ALL - out -; OUT (Z84.PIO.Port_A.Data),A ; DATA - all zeros - -; для printer-a - - LD A,#0F ; OUT - OUT (Z84.PIO.Port_A.Command),A - OUT (Z84.PIO.Port_A.Command),A - -; Инициализация параллельного порта 2 (INT/DMA ISA) - - LD BC,Z84.PIO.Port_B.Command - - LD A,#CF ; BITS I/O - OUT (C),A - LD A,#3F - OUT (C),A - LD A,#C0 - OUT (Z84.PIO.Port_B.Data),A - -; "Заглушение" ковокса - - XOR A - OUT (CBL.SYS_PORT),A - LD BC,CBL.OUT - LD A,#80 -.CBL_MUTE: - OUT (C),A - DJNZ .CBL_MUTE - -; Сброс контроллера дисковода - -; Включить доступ к контроллеру диска - - LD A,CNF_3 - OUT (SYS_PORT.ON),A - - OUT (FDC_93.DrvCTRL),A ; !!!!! глянуть - push hl - pop hl - LD A,#3C ; !!!!! глянуть - OUT (FDC_93.DrvCTRL),A ; !!!!! глянуть - push hl - pop hl - XOR A - OUT (FDC_93.Command),A - -; Выключить доступ к контроллеру диска - - LD A,CNF_0 - OUT (SYS_PORT.ON),A - -; set HDD1/not-HDD2 - - LD A,#21 ;!HARDCODE сделать через метку - OUT (#BC),A ;!HARDCODE - -; CALL DOS_OFF - - - LD BC,#7FFD - LD A,#10 - OUT (C),A ; BASIC_48 mode - LD B,#1F - LD A,01 - OUT (C),A ; RAM-0 mode !!! - - RET - -;************************************** - -; -;------------------------[copy zx-roms to zx-pages]---------------------; -; SLOT0 - ROM 8, sys_port - on. -; RAM SLOT0 - page 0 -; для режима zx spectrum -; ВЫПОЛНЯЕТСЯ ИЗ ОЗУ -init_zx_roms: - DISP Reset_Handler.init_rom_address - - in a,(SLOT3) - push af - - DI - LD A,1 - OUT (SYS_PORT.ON),A - ld a,2 - - IF SetFullZXromLoader - ld b,6 ; zx-rom number of pages - ELSE - ld b,4 - ENDIF - -.loop: - push bc - - out (ROM.SLOT0),a - or %01000000 - out (SLOT3),a - and %10111111 - - LD HL,0 - LD DE,#C000 - LD BC,#4000 - LDIR - - inc a - pop bc - DJNZ .loop - - xor a - out (ROM.SLOT0),a - OUT (SYS_PORT.ON),A - POP AF - out (SLOT3),a - - - LD A,#E2 ; ROM-ID - BASIC 128 - LD B,#42 ; page - CALL .SET_ROM - - LD A,#E3 ; ROM-ID - BASIC 48 - LD B,#43 ; page - CALL .SET_ROM - - LD A,#E1 ; ROM-ID - TR-DOS - LD B,#44 ; page - CALL .SET_ROM - - LD A,#E0 ; ROM-ID - EXPANSION - LD B,#45 ; page - CALL .SET_ROM - - - LD A,#EB ; ROM-ID - BIOS-1 - IF SetFullZXromLoader - LD B,#46 ; page - ELSE - LD B,#45 ; page - ENDIF - CALL .SET_ROM - - - IF SetFullZXromLoader - LD A,#EF ; ROM-ID - BIOS-2 - LD B,#47 ; page - CALL .SET_ROM - ENDIF - RET - -.SET_ROM: - LD C,BIOS.SET_PORTS - JP ToBIOS_3D13 - - ENT -.length EQU $-init_zx_roms -;-----------------------------------------------------------------------; -; - - -;************************************** -;************************************** - -GOTO_SPEC: ; ????? процедура биоса для захода в режим спеткрума - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,B - LD (SYS_PAGE.CONFIG_DE+1),A - EX AF,AF' - OUT (SLOT3),A - -;NO_SETUP_2: -; CP #FC -; JR Z,SPECTRUM_0 ; Конфигурация AY - -;NO_SETUP_1: -ZX_SPECTRUM_MODE: -; LD A,(#A8) -; OUT (Z84.PIO.Port_A.Data),A - - LD A,#FE ; !HARDCODE сделать через метку ACC-off Spectrum-MODE - LD BC,Port_All_Mode - OUT (C),A - -;SND_TEST_RET: - LD SP,#BFFF - - CALL INT_PENT - CALL SET_PAL_ZX - - LD HL,#4104 - LD E,0 - LD B,4 - CALL LP_OPEN_S - - LD HL,#5104 - LD E,0 - LD B,4 - CALL LP_OPEN_S - -;************************************* -/* - LD D,#35 - CALL CMOS_RD - BIT 0,A ; !!!!! -*/ -; PUSH AF -; CALL Z,SPRINTER_1 -; POP AF -; PUSH AF -; CALL NZ,AY8910 -; POP AF - -;************************************* - -SPECTRUM_0: - XOR A ; задача 0, режим 256 килобайт -SPECTRUM_TASK: - LD IX,BASIC_128 - JP INIT_PAGES ; инициализация номеров страниц режима спектрума - -BASIC_128: -;start_basic: - LD SP,#BFFF - LD HL,RES128_PROG - LD DE,#5B00 ; запуск программы на BASIC-е. - LD BC,LEN_RES128 - LDIR - DI - JP #5B00 - -;******************************** -; Программа, размещаемая на 5B00h для запуска Spectrum-а - -RES128_PROG: - LD A,ROM.EXT - OUT (SYS_PORT.OFF),A ; Возврат в 128k ROM - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (SLOT3),A - LD DE,(SYS_PAGE.CONFIG_DE) - XOR A - LD (SYS_PAGE.CONFIG_DE+1),A - OUT (C),B - - LD BC,#1FFD - OUT (C),A ; Scorp порт - LD B,#7F - OUT (C),A ; 128 порт - - LD A,E ; установка конфигурации и режима TURBO - OUT (SYS_PORT.OFF),A ; CONFIG_SET - - INC D - DEC D - JP Z,0 ; 0 ВХОД В BASIC-128 - LD A,#10 - OUT (C),A - DEC D - JP Z,0 ; 1 ВХОД В BASIC-48 - - LD HL,0 - PUSH HL - DEC D - JP Z,#3D29 ; 2 ВХОД В TR-DOS - - XOR A - OUT (C),A - LD A,#02 - LD B,#1F - OUT (C),A - DEC D - JP Z,0 ; 3 ВХОД В EXPANSION ??? - - LD A,0 - OUT (C),A - LD A,#30 - LD B,#7F - OUT (C),A - DEC D - JP Z,#3D29 ; 4 ВХОД В TR-DOS с закрытыми 128-ми портами - JP 0 ; 5 ВХОД В BASIC-48 с закрытыми 128-ми портами -LEN_RES128 EQU $-RES128_PROG - -;***************************************************** - -TURBO_OFF: - LD A,D_TBOFF - OUT (SYS_PORT.ON),A - RET - -TURBO_ON: - LD A,D_TBON - OUT (SYS_PORT.ON),A - RET - -JP_HL: JP (HL) - -;*************************************** - -RAM_BIOS_PROG: ; for CALL BIOS in 41h page - PUSH AF - LD A,ROM.EXT - OUT (SYS_PORT.ON),A - POP AF - RET - NOP -.Length EQU $-RAM_BIOS_PROG -; JR RST_18_1 - - -; -; -PROG_NO_ROM: - DISP #38 - - DI - - LD A,#FF - OUT (SLOT3),A - OUT (SLOT2),A - OUT (SLOT1),A - - LD SP,#BF00 - - LD C,BIOS.LP_OPEN_S - LD B,3 - LD E,0 - RST ToBIOS - - LD C,BIOS.LP_CLS_WIN - LD DE,0 - LD HL,#2050 - RST ToBIOS - - LD A,1 - OUT (RGMOD),A ; set scr-2 - - LD HL,MESSAGE_NR - LD DE,#A000 - LD BC,MESSAGE_NR.size - LD A,C - LDIR - - LD HL,#A000 - LD D,0 ; delimiter - LD E,COLORS.FLASH + COLORS.PAPER.RED + COLORS.INC.CYAN - LD B,A - LD C,BIOS.LP_PRINT_LN3 - RST ToBIOS - -1: DI : HALT - JR 1B - -MESSAGE_NR: DZ " Spectrum ROM not installed. Use spectrum.exe Press Ctrl+Alt+Del or RESET" -.size EQU $-MESSAGE_NR - - ENT -PROG_NO_ROM.size EQU $-PROG_NO_ROM -;-------------[new code end]------------ - - -;***************************************************** - - -;CH_2: -; LD A,2 -;C_1601: ; OPEN CHANEL -; CALL_48 1601h -; RET - - -;PRINT_LINE: -; LD A,(HL) -; INC HL -; CP 0FFh -; RET Z -; RST 10H -; JR PRINT_LINE - - -; JP RESET_128 - -;******************************** -; *** UTILITES *** -;******************************** - -;C_0030: ; получить раб обл -; CALL_48X 0030h -; RET -;C_19E8: ; очистить раб обл -; CALL_48X 19E8h -; RET -;C_1655: ; получить пространство -; CALL_48X 1655h -; RET - -;**************************************** -; ******* SERVICE ******* -;**************************************** - -;******************************************************* -; ДЕШИФРАЦИЯ КОМАНДНОЙ СТРОКИ,ПЕРЕДАННОЙ ДЛЯ "EXPANSION" -;******************************************************* - -;COMAND_LINE: -; LD HL,(CH_ADR) -;COMAND_LOOP: -; LD A,(HL) -; INC HL -; CP ":" -; JR Z,COMAND_L1 -; CP 0Dh -; JR NZ,COMAND_LOOP -; RET - -;COMAND_L1: -; LD A,(HL) -; CP 0EAh ; REM !!! -; RET NZ -; INC HL -;COMAND_OK: ; ОБНАРУЖЕНА КОМАНДА ДЛЯ 'expansion' -; LD A,(HL) -; INC HL -; CP ':' -; JP Z,MENU_S1 -; CP 0Dh -; JP Z,MENU_S1 -; CP 'I' -; JR Z,COMAND_ISD -; CP 'i' -; JR Z,COMAND_ISD -; CP 'T' -; JR Z,TASK_SWITCH -; CP 't' -; JR Z,TASK_SWITCH -; DEC HL -; POP BC -; JP BASIC_MENU -;MENU_S1: -; POP BC -; CALL SERVICE -; JP SW_ROM_1 -; -;COMAND_ISD: -; LD A,(HL) -; INC HL -; CP 'S' -; JP Z,COMAND_ISD2 -; CP 's' -; JP Z,COMAND_ISD2 -; RET - -;COMAND_ISD2: -; POP BC -; CALL ISDOS -; JP SW_ROM_1 - - -;TASK_SWITCH: -; -;; *** Сохранить задачу *** -; PUSH IY -; PUSH IX -; PUSH AF -; PUSH BC -; PUSH DE -; PUSH HL - -; EXX -; EX AF,AF' - -; PUSH AF -; PUSH BC -; PUSH DE -; PUSH HL -; -; LD A,R -; PUSH AF -; LD A,I -; PUSH AF -; -; LD A,(HL) -; RLCA -; RLCA -; RLCA -; RLCA -; AND 30H ; новая задача 0..3 -; LD C,A - -; IN A,(SLOT3) -; LD B,A ; 3-я страница текущей задачи -; LD A,SYS_PAGE -; OUT (SLOT3),A -; -; LD IX,TASK_DATA ; данные задач -; LD E,(IX) ; старая задача -; LD D,0 -; ADD IX,DE ; данные текущей задачи -; LD E,16 -; ADD IX,DE ; смещение данных в таблице задач -; -; LD (IX+1),B ; сохранить страницу 3 -; LD HL,0 -; ADD HL,SP -; LD (IX+2),L ; сохранить стек задачи -; LD (IX+3),H -; SET 0,(IX) ; установить флаг сохраненности текущей задачи -; RES 1,(IX) ; установить флаг, что задача покинута - -; LD IX,TASK_DATA -; LD E,C -; LD D,0 -; ADD IX,DE ; новая задача -; LD E,16 -; ADD IX,DE ; смещение данных в таблице задач - -; BIT 1,(IX) -;; JR NZ,TASK_IN_WORK ; задача в работе ??? неверное завершение -; ; сбрасывать или просто возвращаться -; -; BIT 0,(IX) ; была сохранена/нет -; JR NZ,TASK_SET ; задача существует -; -;; задачи не было! -; LD IX,TASK_DATA -; LD A,C ; задача -; LD (IX),A ; установить новую задачу текущей -; -; JP SPECTRUM_TASK ; запустить новую задачу! -; и пока пофиг распределение памяти! - -;TASK_SET: -; -; LD IX,TASK_RESTORE -; LD A,C -; EXX -; JP INIT_PAGES ; переключить все страницы! - -;TASK_RESTORE: -; EXX -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LD A,C -; LD IX,TASK_DATA -; LD (IX),A ; установить новую задачу текущей - -; LD E,A -; LD D,0 -; ADD IX,DE ; новая задача -; LD E,16 -; ADD IX,DE - -; LD L,(IX+2) ; вспомнить стек -; LD H,(IX+3) -; LD SP,HL -; LD A,(IX+1) ; вспомнить третью страницу -; OUT (SLOT3),A - - -; POP AF ; восстановить -; LD I,A -; POP AF -; LD R,A -; POP HL -; POP DE -; POP BC -; POP AF -; EX AF,AF' -; EXX -; POP HL -; POP DE -; POP BC -; POP AF -; POP IX -; POP IY -; ; вернуться в задачу -; -;NO_TASK: -; POP BC -; JP SW_ROM_1 -; -;; 259F - ADRESS BASIC128 - MAIN_MENU - -;********************************************** -; paths from project DIR - INCLUDE 'EXP_HDD.asm' - INCLUDE 'SERVICE.asm' -; INCLUDE 'TEST.ASZ' - INCLUDE 'FLEX.asm' - IFN SET_NEWdcp - INCLUDE './src/bios/old_files/EXP_DCP_UNPACKER.asm' - ENDIF -; INCLUDE 'EXP_SCR.ASZ' - INCLUDE 'EXP_PIC2.asm' - - IFN SET_NEWdcp - INCLUDE 'EXP_FN2.asm' - ELSE - INCLUDE 'EXP_FN.ASM' - INCLUDE 'EXP_FN2.asm' - ENDIF -;********************************************** -; BLOCK DCP_DATA-$,#FF -; -; #-5kb-############################## -; #::::::::::::::::::::::::::::::::::#\ -; #::::: Место данных для DCP :::::::#\ -; #::::::::::::::::::::::::::::::::::#\ -; ####################################\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -DCP_DATA: - - IFN SET_NEWdcp - INCBIN './src/bios/old_files/EXP_DCP.LZ' - ELSE - INCLUDE 'EXP_DCP_2.ASM' - ENDIF -;********************************************** - -;********************************************** - ;BLOCK #2800-$,#FF -; -; #-2kb-############################## -; #::::::::::::::::::::::::::::::::::#\ -; #:::: Здесь место для IBM-ZG ::::::#\ -; #::::::::::::::::::::::::::::::::::#\ -; ####################################\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -ZG_ADRESS: - INCBIN 'EXP_FONT.FNT' -;********************************************** -; BLOCK #3000-$,#FF - IFN SET_NEWdcp - INCLUDE 'EXP_FN.asm' - ENDIF - INCLUDE 'EXP_LP2.asm' -;********************************************** -FN_SEND_BYTE: - LD E,A ; сохранить байт - CALL SEND_HALF_BYTE ; передать полубайт из Е - RET C ; возврат по ошибке - LD A,E ; сдвинуть байт на 4 бита - RRCA - RRCA - RRCA - RRCA - LD E,A - -SEND_HALF_BYTE: ; передать половину байта _E_!! - LD A,E - OR #F0 ; установить старшие биты LPT дата - OUT (Z84.PIO.Port_A.Data),A - LD BC,0 ; счетчик тайм-аута - -WAIT_SENT_1: - IN A,(KEMPSTON.JOY_DOS) ; проверить бит 4 на 1 при готовности PC - BIT 4,A - JR NZ,CONTINUE_SENT - DEC BC - LD A,B - OR C - JR NZ,WAIT_SENT_1 - XOR A - SCF ; тайм-аут - RET - -CONTINUE_SENT: ; PC - готов - LD A,E - AND #0F ; сбросить старшие биты LPT - - OUT (Z84.PIO.Port_A.Data),A - - LD BC,0 ; счетчик тайм-аута - -WAIT_SENT_2: - IN A,(KEMPSTON.JOY_DOS) ; проверить бит 4 на 0 - сообщение от PC - BIT 4,A - JR Z,CONTINUE_SENT2 - DEC BC - LD A,B - OR C - JR NZ,WAIT_SENT_2 - LD A,E - OR #F0 ; установить старшие биты LPT дата - OUT (Z84.PIO.Port_A.Data),A - XOR A - SCF ; тайм-аут - RET - -CONTINUE_SENT2: ; полубайт передан - LD A,E - OR #F0 ; установить старшие биты LPT дата - OUT (Z84.PIO.Port_A.Data),A - XOR A - RET - -;********************************************** - -FN_RESEIVE_B: ; принять байт в A - - CALL RESEIVE_POLU_BYTE ; принять полубайт - RET C ; возврат по ошибке - RLCA - RLCA - RLCA - RLCA - AND #F0 - LD E,A - CALL RESEIVE_POLU_BYTE ; второй - RET C - AND 0Fh - OR E - RET ; байт принят - -RESEIVE_POLU_BYTE: ; принять половину байта в Е - - LD A,#F0 ; установить старшие биты LPT дата - OUT (Z84.PIO.Port_A.Data),A - LD BC,0 ; счетчик тайм-аута - -WAIT_RES_1: - IN A,(KEMPSTON.JOY_DOS) ; проверить бит 4 на 1 при готовности PC - BIT 4,A - JR NZ,CONTINUE_RES - DEC BC - LD A,B - OR C - JR NZ,WAIT_RES_1 - XOR A - SCF ; тайм-аут - RET - -CONTINUE_RES: ; PC - готов, ждать 0 - XOR A ; сбросить старшие биты LPT - ждем полубайт - OUT (Z84.PIO.Port_A.Data),A - - LD BC,0 ; счетчик тайм-аута - -WAIT_RES_2: - IN A,(KEMPSTON.JOY_DOS) ; проверить бит 4 на 0 - сообщение от PC - BIT 4,A - JR Z,CONTINUE_RES2 - DEC BC - LD A,B - OR C - JR NZ,WAIT_RES_2 - LD A,#F0 ; установить старшие биты LPT дата - OUT (Z84.PIO.Port_A.Data),A - SCF - RET ; ошибка - -CONTINUE_RES2: ; полубайт выставлен -LOOP_EQ: ; прочитать еще раз, что бы совпало - AND #0F - LD B,A - IN A,(KEMPSTON.JOY_DOS) - AND #0F - CP B - JR NZ,LOOP_EQ - - OR #F0 ; установить старшие биты LPT дата в 1 - принято - OUT (Z84.PIO.Port_A.Data),A - RET - -;*************************************** -;!!!!! посмотреть -; BLOCK #3CC0-$,255 - ; no-magics! -;MAGIC_1: ; ЗАГЛУШКА ДЛЯ MAGIC -; PUSH AF -; LD A,ROM.EXT -; OUT (SYS_PORT.OFF),A -; POP AF -; JP MAGIC_1 -;MAGIC_3: -; PUSH AF -; LD A,ROM.EXT -; OUT (SYS_PORT.OFF),A -; POP AF -; RETN -;MAGIC_2: -;; CALL MG_BEGIN -; JR MAGIC_3 - -;************************* -; BLOCK #3CE0-$,0 -;SW_ROM_1: -; LD HL,259Fh -; PUSH HL -; LD HL,5B00h -; LD A,(HL) -; CP #F5 -; JR Z,JP_HL_48 ; ВОЗВРАТ К МЕНЮ BASIC128 -; POP HL -; JR SW_ROM ; ПРОСТОЙ ВОЗВРАТ -;************************* - -; BLOCK #3CF0-$,0 -;JMP_48: -; LD HL,00h -; JR JP_HL_48 -; -; NOP -; NOP -; NOP - -;*************************************** -; BLOCK #3CF8-$,0 - ; no basic-48! -;JP_HL_48: -; PUSH HL -;SW_ROM: -; PUSH AF -; LD A,ROM.EXT -; OUT (SYS_PORT.OFF),A -; POP AF -; RET -;*************************************** - _mInfoBLOCK #3D00-$,#FF -DOS_ON: NOP - RET -;*************************************** - -;*************************************** -; BLOCK #3D02-$,FF -; !TODO можно оприходовать тут 17 байтов -; -;*************************************** - -;*************************************** - _mInfoBLOCK #3D13-$,#FF - - NOP - JP #18 -;*************************************** - -;*************************************** -; BLOCK #3D17-$,FF -; !TODO можно оприходовать тут 233 байта -; -;*************************************** - -;*************************************** - _mInfoBLOCK #3E00-$,#FF -DOS_OFF: - DI - PUSH AF - PUSH BC - LD BC,(#5BFF) ; !HARDCODE - LD A,#C9 - LD (#5BFF),A ; !HARDCODE - CALL #5BFF ; !HARDCODE - LD (#5BFF),BC ; !HARDCODE - POP BC - POP AF - RET -;*************************************** - -;*************************************** -;START_HDD: -; -; LD C,2 -; CALL EXP_HDD -; RET C -; -; LD A,0 -; OUT (0FEH),A -; -; LD HL,4000H -; LD DE,4001H -; LD BC,1AFFH -; LD (HL),0 -; LDIR -; -; LD HL,0 -; LD IX,LP_SCR_80 -; CALL WIN_OPEN_WIN -; -; LD HL,#2050 -; LD DE,0 -; LD B,07H -; CALL LP_CLS_WIN -; -; LD DE,0 -; CALL LP_SET_PLACE -; -; LD HL,ID_SPRINTER -; LD E,47H -; LD B,L_ID -; CALL LP_PRINT_LINE -; -; LD C,0 -; CALL EXP_HDD -; RET C -; -; LD DE,1 -; LD IX,0 -; LD B,16 -; LD HL,8000H -; LD C,5 -; CALL EXP_HDD -; RET C -; LD HL,8000H -; LD DE,HDD_MSG -; LD B,HDD_MSG_LEN -;START_HDD_L: -; LD A,(DE) -; CP (HL) -; JR NZ,NO_BOOT -; INC HL -; INC DE -; DJNZ START_HDD_L -; JP (HL) -;NO_BOOT: -; RET -; - -;HDD_MSG: DB "Starting...",0 -; -;HDD_MSG_LEN EQU $-HDD_MSG -; -;HDD_MSG_NO: DB "Boot record not found" -;HDD_NO_LEN EQU $-HDD_MSG_NO - -;SAVE_AUTOSTART: -; LD HL,8000H -; LD DE,HDD_MSG -; LD B,HDD_MSG_LEN -;SAVE_AUTO_L1: -; LD A,(DE) -; CP (HL) -; RET NZ -; INC HL -; INC DE -; DJNZ SAVE_AUTO_L1 -; -; LD C,0 -; CALL EXP_HDD -; RET C -; -; LD HL,8000H -; LD A,0 -; LD DE,1 -; LD IX,0 -; LD B,16 -; LD C,6 -; CALL EXP_HDD -; RET -;*************************************** - -;*************************************** -; BLOCK #3E16-$,FF -; !TODO можно оприходовать тут 10 байтов -; -;*************************************** - -;*************************************** -;------[ ; !TODO что- то связанное с переменными LIB_TABLE ; ]------ -; _mInfoBLOCK #3E20-$,#FF - -FN_LIB: - SCF - RET -/* - - IN A,(SLOT3) - LD B,A - LD A,SYS_PAGE - OUT (SLOT3),A - PUSH HL - LD L,C - дешефратор API изменился и теперь в C не то, что тут ожидается. Ожидается #A0..AF - LD H,#C1 - LD A,(HL) - POP HL - AND A - SCF - JR Z,FN_LIB_RET - - OUT (SLOT3),A - LD (#C0FE),SP - LD SP,#C0F0 - PUSH BC - CALL #C100 ; !HARDCODE - POP BC - LD SP,(#C0FE) - ; LD A,B - ; OUT (SLOT3),A - ; RET - -FN_LIB_RET: - LD A,B - OUT (SLOT3),A -; SCF - RET -*/ -;---------------------------------------------------------------[]------ - -FN_KBD_OUT: ; вход A - byte -; B - speed_parameter - - AND A - LD E,A - LD D,#FF - JP PE,kbd_parity ; установка паритета PE/PO ??? - LD D,#FE -kbd_parity: - AND A ; первый бит - start-bit - 0 - RL E - RL D ; в DE - 11 бит для передачи - LD C,11 - -kbd_loop: - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#60 - BIT 0,E - JR NZ,no_inv - XOR 2 ; данные -no_inv: - LD L,A - OUT (Z84.SIO.Ch_A.Ctrl),A ; выставить данные - - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,L - OR #80 ; синхроимпульс - OUT (Z84.SIO.Ch_A.Ctrl),A ; импульс синхро - LD A,B ; speed_par -kbd_loop1: - PUSH HL - POP HL - DEC A - JR NZ,kbd_loop1 - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,L - OUT (Z84.SIO.Ch_A.Ctrl),A ; снять импульс синхро - - LD A,B ; speed_par -kbd_loop2: - PUSH HL - POP HL - DEC A - JR NZ,kbd_loop2 - RR D - RR E - DEC C - JR NZ,kbd_loop - - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#60 - OUT (Z84.SIO.Ch_A.Ctrl),A ; закончить передачу - AND A - RET -;**************************************** - - -; Чтение с ROM-Disk -; HL - адрес, куда читать -; DE - номер сектора (считать по 256b сектор) -; B - число секторов -; A' - размер сектора (1 - 256b, 2 - 512 b) -ROM_DISK: - LD C,0 ; счетчик - EX AF,AF' - DEC A - JR Z,.loop - DEC A - SCF - RET NZ - - EX DE,HL - ADD HL,HL - EX DE,HL - LD A,B - ADD A,A - LD B,A - RET C - - CALL .loop - RET C - AND A - RR D - RR E - XOR A - RET - -/* -; ????? какой-то глюк недоделанный -READ_ROM_PAGE_X: - LD DE,0 - LD BC,#100 ; один сектор - PUSH DE - PUSH BC - LD HL,ROM_DISK_PGS - LD DE,#FF00 ; !HARDCODE - LD A,#1F ; last page ROM - JR LOOP_NEXT -*/ - -.loop: - PUSH DE ; номер сектора - PUSH BC - - LD A,E - AND 63 ; ADRESS in ROM-Page - PUSH AF ; сохранить адрес - - EX DE,HL ; DE - адрес буфера - ADD HL,HL - ADD HL,HL ; H - номер банки - - LD A,(ROM_DISK.Pages.Number) - INC H - CP H - LD L,H - LD H, high ROM_DISK.Pages.Number ; ROM-Disk pages! - LD A,(HL) ; PAGE-ROM - - POP HL ; восстановить адрес в ROM-Page - LD L,0 ; если далеко захотели - выход с ошибкой - JR C,.errorExit ; ROM-Disk-end - -; DE - буфер -; HL - адрес в ROM -; B - число секторов -; A - ROM-Page -.loopRead: - DI - PUSH HL ; откуда - PUSH DE ; куда - - LD HL,-.stackDepth - .readProcedure.size ; memory stack use! - ADD HL,SP ; stack - - PUSH HL ; адрес программы .readProcedure - - LD DE,.readProcedure ; перенести программу на стек - EX DE,HL - LD BC,.readProcedure.size - LDIR ; программа на стеке - LD BC,#100 ; длина сектора - RET ; исполнить программу .readProcedure, на стеке адреса буфера и ROM - - -; DE - next address -; HL - ROM address -.readNext: - POP BC ; число секторое - - INC C ; счетчик считанных секторов - DEC B ; сектора кончились? - - JR Z,.normExit - BIT 6,H ; чтение не закончено - - PUSH BC ; сохранить счетчики - JR Z,.loopRead ; читать дальше - POP BC - - POP HL ; номер сектора - - LD A,B - LD B,0 - ADD HL,BC - LD B,A ; вычислить след.сектор - - EX DE,HL ; теперь HL - адрес, DE сектор, B - сколько еще читать - - JP .loop ; начать все снова! - -; чтение закончено -.normExit: - POP HL ; сектор, откуда велось чтение - ADD HL,BC ; по возврату: HL - след.адрес - EX DE,HL ; DE - след.сектор - AND A - RET -; ошибка -.errorExit: ; !TODO сделать, чтоб на выходе показывалось количество прочитанных секторов - POP BC - POP DE - SCF - RET - -; процедура, переносимая на стек для чтения из ROM-Disk -; осторожнее с PUSH, если надо много, то увеличивай .stackDepth -.readProcedure: - POP DE ; куда - POP HL ; откуда - OUT (ROM.SLOT0),A ; ROM_PAGE - LDIR ; здесь читается из ROM-Disk - LD B,A - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ON),A - LD A,B - JP .readNext -.stackDepth EQU 8 ; расстояние от конца процедуры до вершины стека. -.readProcedure.size EQU $-.readProcedure -;-----------------------------------------------------------------------; -; - -;-----------------------------------------------------------------------; -; ROM-Disk pages ; [ ] активировать ROM-DISK - _mInfoALIGN 256,#FF -; BLOCK #3F00-$,#FF -ROM_DISK.Pages.Number: - DB ROM_DISK.Pages.Size ; число страниц -; у страниц выставлен bit4 для корректной подстановки -;(подробнее в sp2000.inc - Порт управления страницами ПЗУ) -ROM_DISK.Pages: ; страницы ROM-Disk -; ABYTE #10 #01,#02,#03,#04,#05,#06,#07,#09,#0A,#0B ; 163840 bytes - without ZX-ROMS - IFN SetFullZXromLoader - ABYTE #10 #06,#07,#09,#0A,#0B ; 81920 bytes - - ELSE - ABYTE #10 #09,#0A,#0B ; 49152 bytes - - ENDIF - -.Size EQU $-ROM_DISK.Pages -; конец - FF -; DB #FF -;-----------------------------------------------------------------------; - -; - _mInfoBLOCK ToBIOS_FromEXT-$,#FF -;------------[Return to ROM]------------ -; #3FD0 -; Для вызова функций биоса из страницы 0 ПЗУ (ROM Extension) -FN1_RET: - PUSH AF - LD A,ROM.EXPANSION - OUT (SYS_PORT.ON),A - POP AF - RST #18 - JR FN1_RET - -; !TODO Free 7 bytes -;--------------------------------------- -; - - -; - _mInfoBLOCK #3FE0-$,#FF -;---------------[ Free ]---------------- -; !TODO Free 8 bytes and entry point -;SOUND_TEST: -; LD A,ROM.EXPANSION -; OUT (SYS_PORT.ON),A -; JP SND_TEST_RET -;--------------------------------------- -; - -;!TEST не нужно если new_api_table -;------------[HDD_5x portal]------------ -; точка входа/выхода для функций 5х из EXP - _mInfoBLOCK #3FE8-$,#FF -EXP_HDD: ;HDD_EXE: - PUSH AF - LD A,ROM.EXPANSION - OUT (SYS_PORT.ON),A - POP AF - RET -;--------------------------------------- -; - - -; - _mInfoBLOCK #3FF0-$,#FF -;---------------[ Free ]---------------- -; !TODO Free 8 bytes and entry point -;--------------------------------------- -; - - -; - _mInfoBLOCK #3FF8-$,#FF -;-----[ From TR-DOS to API #80..#FF]----- -; Точка входа/выхода для TR-DOS -EXP_FNS_RET: - PUSH AF - LD A,ROM.EXT - OUT (SYS_PORT.OFF),A ; Точка входа/выхода из/в TR-DOS при вызове функций BIOS #80..#FF - JP EXP_FNS ; !TEST new_api -;--------------------------------------- -; - -; - _mInfoBLOCK #4000-$,#FF -;======================================================================= diff --git a/src/bios/backup/EXP_FN.as b/src/bios/backup/EXP_FN.as deleted file mode 100644 index 1ba734b..0000000 --- a/src/bios/backup/EXP_FN.as +++ /dev/null @@ -1,841 +0,0 @@ -; - _mInfoALIGN 256,0 -TAB_FNS: ; !FIXIT поправить в доке названия функций, часть не совпадает -; 8x -/* 80 */ DW LP_OPEN_S ; открытие окна -/* 81 */ DW LP_PRINT_ALL ; печать символа в окно -/* 82 */ DW LP_PRINT_SYM ; печать символа без атр -/* 83 */ DW LP_PRINT_ATR ; печать только атрибута -/* 84 */ DW LP_SET_PLACE ; установка позиции печати -/* 85 */ DW LP_PRINT_LINE ; печать строки длиной B -/* 86 */ DW LP_PRINT_LINE2 ; печать строки -//- без атрибутов -/* 87 */ DW LP_PRINT_LINE3 ; печать строки длиной B до D -/* 88 */ DW LP_PRINT_LINE4 ; печать строки -//- без атрибутов -/* 89 */ DW LP_CLS_WIN -/* 8A */ DW LP_SCROLL_UD -/* 8B */ DW LP_PRINT_LINE5 -/* 8C */ DW LP_PRINT_LINE6 -/* 8D */ DW LP_CLS_WIN2 -/* 8E */ DW LP_GET_PLACE -/* 8F */ DW FN_TURBO -; 9x -/* 90 */ DW EMM.GetMemSize ; неразрушающее определение объема ОЗУ. -/* 91 */ DW EMM.InitMem ; инициализация распределения памяти -/* 92 */ DW EMM.GetMemRMD ; получить блок памяти для рамдиска -/* 93 */ DW EMM.FreeMemRMD ; освободить блок памяти рамдиска -/* 94 */ DW EMM.GetMemPageRMD ; получить номерa страниц RAM-Disk -/* 95 */ DW EMM.GetMemPageNext ; получить следующую страницу -/* 96 */ DW EMM.GetBanksPorts ; получить адреса портов -/* 97 */ DW EMM.CheckColdInit ; проверка на холодный старт и инициализации если он ;????? нужна ли как API? -/* 98 */ DW RAMD_CALC_PAGE ; Fn 98h ;????? -/* 99 */ DW SET_DISK_TYPE ; ;????? -/* 9A */ DW DISK_REDIR ; ;????? -/* 9B */ DW FN_NO ;GET_RAMD_NUM ; получить номер ram disk по его block id -/* 9C */ DW FN_NO ; -/* 9D */ DW EMM.DivMemBlocks ; разделения блока на два. -/* 9E */ DW EMM.MergeMemBlocks ; слияние двух блоков -/* 9F */ DW EMM.FullInit ; инициализация всей памяти, системных переменных -; Ax -/* A0 */ DW PIC_FN0 ; ОТКРЫТИЕ ОКНА - Fn 0A0h -/* A1 */ DW PIC_FN1 ; ВЫВЕСТИ ТОЧКУ -/* A2 */ DW PIC_FN2 ; ВЫВОД ЛИНИИ COPY -/* A3 */ DW PIC_FN3 ; ВЫВОД ЛИНИИ FILL -/* A4 */ DW PIC_FN4 ; ВЫВОД ПАЛИТРЫ -/* A5 */ DW PIC_FN5 ; УСТАНОВКА RGMOD -/* A6 */ DW PIC_FN6 ; A - page_pal, E - номер палитры, B - тип палитры -/* A7 */ DW PIC_FN7 ; Рисование линии одного цвета -/* A8 */ DW PIC_FN8 ; Рисование разноцветной линии -/* A9 */ DW PIC_FN9 ; нет -/* AA */ DW PIC_FN10 ; нет -/* AB */ DW PIC_FN11 ; нет -/* AC */ DW PIC_FN12 ; нет -/* AD */ DW PIC_FN14 ; нет -/* AE */ DW PIC_FN14 ; нет -/* AF */ DW PIC_FN15 ; нет -; Bx -/* B0 */ DW WIN_OPEN ; открытие окна по описателю -/* B1 */ DW WIN_CLOSE ; закрытие окна -/* B2 */ DW WIN_COPY ; сохранение текстового окна в памяти -/* B3 */ DW WIN_RESTORE ; восстановление текстового окна из памяти -/* B4 */ DW WIN_GET_SYM ; взять символ -/* B5 */ DW WIN_PUT_SYM ; положить символ -/* B6 */ DW WIN_SET_ZG ; загрузка знакогенератора -/* B7 */ DW WIN_MOVE ; переместить окно -/* B8 */ DW WIN_GET_ZG ; получить знакогенератор -/* B9 */ DW FN_NO -/* BA */ DW FN_NO -/* BB */ DW FN_NO -/* BC */ DW FN_NO -/* BD */ DW FN_NO -/* BE */ DW FN_NO -/* BF */ DW FN_NO -; Cx -/* C0 */ DW EMM.GetMemSize ; получить данные об объеме памяти и кол-во своб. стр. -/* C1 */ DW EMM.InitMem ; инициализация распределения памяти -/* C2 */ DW EMM.GetMem ; получить блок памяти -/* C3 */ DW EMM.FreeMem ; освободить блок памяти -/* C4 */ DW EMM.GetMemPage ; получить номер страницы в блоке памяти -/* C5 */ DW EMM.GetMemBlkPages ; получить список страниц блока памяти -/* C6 */ DW EMM.GetBanksPorts ; получить адреса портов окон -/* C7 */ DW EMM.GetMemPageNext ; получить следующую страницу блока -/* C8 */ DW BLK_RD_WR ; функция чтения/записи в блок памяти -/* C9 */ DW BLK_TO_RAMD ; назначить блок RAM-Disk-у -/* CA */ DW RAMD_CLEAR ; освободить RAM-Disk -/* CB */ DW RAMD_TO_DRV ; назначить RAM-Disk на дисковод -/* CC */ DW FDD_TO_DRV ; назначить REAL_DRIVE на дисковод -/* CD */ DW HDD_TO_DRV ; назначить HDD на дисковод -/* CE */ DW GET_RAMD_ST ; получить тип назначения на RAM-Disk -/* CF */ DW GET_DRV_ST ; получить тип назначения на дисковод -; Dx -/* D0 */ DW FN_LIB -/* D1 */ DW FN_LIB -/* D2 */ DW FN_LIB -/* D3 */ DW FN_LIB -/* D4 */ DW FN_LIB -/* D5 */ DW FN_LIB -/* D6 */ DW FN_LIB -/* D7 */ DW FN_LIB -/* D8 */ DW FN_LIB -/* D9 */ DW FN_LIB -/* DA */ DW FN_LIB -/* DB */ DW FN_LIB -/* DC */ DW FN_LIB -/* DD */ DW FN_LIB -/* DE */ DW FN_LIB -/* DF */ DW FN_LIB -; Ex -/* E0 */ DW LP_PRINT_LINE_DIR -/* E1 */ DW FN_NO -/* E2 */ DW FN_NO -/* E3 */ DW FN_NO -/* E4 */ DW FN_NO -/* E5 */ DW FN_NO -/* E6 */ DW FN_NO -/* E7 */ DW FN_NO -/* E8 */ DW FN_SEND_BYTE ; послать байт через PC_link -/* E9 */ DW FN_RESEIVE_B ; принять байт через PC_link -/* EA */ DW FN_KBD_OUT ; послать байт в клавиатуру -/* EB */ DW FN_NO -/* EC */ DW FN_NO -/* ED */ DW FN_CRIPT -/* EE */ DW AY8910 -/* EF */ DW FN_VERSION -; Fx -/* F0 */ DW SPRINTER_1 -/* F1 */ DW SPRINTER_2 -/* F2 */ DW FN_SINC -/* F3 */ DW SPRINTER_ALL -/* F4 */ DW DCP_FN0 -/* F5 */ DW CMOS_TEST -/* F6 */ DW CMOS_RD -/* F7 */ DW CMOS_WR -/* F8 */ DW SET_ROM_PAGES -/* F9 */ DW READ_PORTS ; !TODO -/* FA */ DW WRITE_PORTS ; !TODO -/* FB */ DW GOTO_SPEC ; Goto Spectrum! -/* FC */ DW FN_NO -/* FD */ DW FN_RESET -/* FE */ DW FN_NO ; SAVE_AUTOSTART -/* FF */ DW FN_VERSION - -EXP_FNS: ; Вход в функцию из DOS - POP AF - CALL APIfrom80toFF ; !TEST new_api - CALL DOS_ON - JP EXP_FNS_RET - -;************************************ -; Вход в функцию по RST18 и RST8 -EXP_FNS_RST18: - BIT 7,C - JR NZ,APIfrom80toFF ; !TEST new_api - ;.APIfrom40to5F: - BIT 6,C - RES 6,C - JP NZ,EXP_HDD_NEW - SCF - RET -;********************************** - -;----------------------------------------------------------------------- -FN_CRIPT: - DEC B - SCF - RET NZ - LD HL,(ROM_NUMBER.part1) ;rdlow-ok - LD A,(ROM_NUMBER.part2) ;rdlow-ok - LD BC,(BoardID.start) ;rdlow-ok - LD DE,(BoardID.end) ;rdlow-ok - AND A - RET -; BoardID_start old address #312A -; BoardID_end old address #312D -;----------------------------------------------------------------------- - -;********************************** -;!!!!! глянуть -; START_DI: -; PUSH AF -; LD A,R -; JP PE,XX_DI -; LD A,R -; XX_DI: LD A,#80 -; JP PE,XX_DI2 -; XOR A -; XX_DI2: LD R,A -; DI -; POP AF -; RET - -; END_DI: PUSH AF -; LD A,R -; BIT 7,A -; JR Z,XX_DI3 -; EI -; POP AF ; PE -; RET - -; XX_DI3: DI -; POP AF ; PO -; RET -;********************************** - - -APIfrom80toFF: - PUSH HL - LD L,C - SLA L - LD H,high TAB_FNS - LD C,(HL) // LD A,(HL) - INC L - LD H,(HL) - LD L,C // LD L,A - EX (SP),HL - RET - -;! ! ! ! ! ! ! ! -; !TODO сделать -READ_PORTS: -WRITE_PORTS: -FN_NO: SCF - RET -;! ! ! ! ! ! ! ! - -; ????? может переделать вход? -; CALL from 3D13h! -; in A - page, B - new ROM-page -; out B - old ROM-page -SET_ROM_PAGES: - EX AF,AF' - LD A,CNF_0 - OUT (SYS_PORT.ON),A - - LD C,SLOT2 ; получить страницу - IN D,(C) - - LD A,DCP_PAGE ; установить новую - OUT (C),A - - LD A,(#8000) ; сохранить то что было - LD L,A - LD A,(#8200) - LD H,A - EX AF,AF' ; страница - - LD (#8000),A ; установить порт ROM TR-DOS - LD (#8200),A - - EX AF,AF' - LD A,B - LD BC,0 - EX AF,AF' - - IN A,(C) - - EX AF,AF' - OUT (C),A ; установить новый TR-DOS - EX AF,AF' - - LD B,A - LD A,L - LD (#8000),A ; вернуть порт - LD A,H - LD (#8200),A ; вернуть порт - - LD C,SLOT2 - LD A,SYS_PAGE - OUT (C),A - LD A,(SYS_PAGE.CONFIG_DE-#4000) - OUT (C),D ; вернуть страницу - OUT (SYS_PORT.ON),A - - AND A - RET -;TAB_SIZE EQU $-TAB_FNS - -;***************************************** - -;***************************************** -; Функция дешифратора портов. -; HL - адрес -; DE - маска - 0 изменяемые биты, 1 неизменяемые -; B - порт -; -; ALL STACKS, DI -;***************************************** -DCP_FN0: ; !FIXIT запоминать тут состояние прерываний и вырубать - AND A - JP Z,PORTS_INIT - - PUSH IX - LD IX,.RET_DCP_FN0 - - IN A,(SLOT3) - EX AF,AF' - LD A,DCP_PAGE - OUT (SLOT3),A - - JR DCP_FN0M - -.RET_DCP_FN0: - EX AF,AF' - OUT (SLOT3),A - AND A - POP IX -; !FIXIT восстанавливать прерывания - RET - -;-----------------------------------------------------------------------; -; Функция дешифратора портов. -; HL - адрес -; DE - маска - 0 изменяемые биты, 1 неизменяемые -; B - порт -DCP_FN0M: - LD A,L - AND E - LD L,A - - LD A,H - AND D -; AND #3F - OR #C0 - LD H,A - - LD A,D - OR #C0 - LD D,A - -.loop: LD (HL),B - - LD A,L ; замаскировать неизменяемые биты 1-ми - OR E ; для прохождения переноса - INC A ; увеличить адрес - JR Z,.carry ; возник перенос - - OR E - XOR E ; обнулить неизменяемые биты - LD C,A ; изменяемая часть - - LD A,L - AND E ; выделить неизменяемую - OR C - LD L,A ; добавить изменяемую часть - - JR .loop ; цикл - -.carry: ; A = 0 -; OR E -; XOR E -; LD C,A - LD A,L ; забить изменяемые биты нулями - AND E -; OR C - LD L,A - - LD A,H ; замаскировать неизменяемые биты 1-ми - OR D ; для прохождения переноса - INC A ; увеличить адрес - JR Z,.exit - - OR D - XOR D - LD C,A ; изменяемая часть - - LD A,H - AND D ; выделить неизменяемую - OR C - LD H,A ; добавить изменяемую часть - JR .loop - -.exit: JP (IX) -;-----------------------------------------------------------------------; - - -; RAM-Disk A, BLK - B -BLK_TO_RAMD: - CP SYS_PAGE.RAMD_KEYS.NUM - CCF - RET C - - PUSH HL - LD L,A - - IN A,(SLOT2) - LD C,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD A,L - LD HL,SYS_PAGE.RAMD_KEYS-#4000 - ADD A,L - LD L,A - LD A,(HL) ; ключ блока - AND A - JR NZ,BLK_BUSY ; RAM-Disk занят - ошибка - LD (HL),B - - LD A,C - OUT (SLOT2),A - - LD A,B - AND A - POP HL - RET - -BLK_BUSY: - LD A,C - OUT (SLOT2),A - - SCF - POP HL - RET - -; RAM-Disk A -RAMD_CLEAR: - CP SYS_PAGE.RAMD_KEYS.NUM - CCF - RET C - - PUSH HL - LD L,A - - IN A,(SLOT2) - LD C,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD A,L - LD HL,SYS_PAGE.RAMD_KEYS-#4000 ; RAM-Disk свободен - ADD A,L - LD L,A - LD B,A ; запомнить удаляемый рамдиск - LD A,(HL) - AND A - JR Z,BLK_BUSY ; возврат с ошибкой - LD (HL),0 - LD A,C - OUT (SLOT2),A - - AND A - POP HL - RET - -; RAM-Disk A, DRV - B -RAMD_TO_DRV: - CP SYS_PAGE.RAMD_KEYS.NUM - CCF - RET C - LD C,A - LD A,B - CP 4 - CCF - RET C - - LD HL,SYS_PAGE.DISK_TYPE-#4000 - LD L,B - - IN A,(SLOT2) - LD B,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD A,C - ADD A,4 - LD (HL),A - LD A,B - OUT (SLOT2),A - AND A - RET - -; Disk A, DRV - B -FDD_TO_DRV: - CP 4 - CCF - RET C - LD C,A - - LD A,B - CP 4 - CCF - RET C - - LD HL,SYS_PAGE.DISK_TYPE-#4000 - LD L,B - - IN A,(SLOT2) - LD B,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD (HL),C - LD A,B - OUT (SLOT2),A - - AND A - RET - -; HDD A, DRV - B -HDD_TO_DRV: - AND 0FH - LD C,A - LD A,B - CP 4 - CCF - RET C - - LD HL,SYS_PAGE.DISK_TYPE-#4000 - LD L,B - - IN A,(SLOT2) - LD B,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD A,C - ADD A,40H - LD (HL),A - LD A,B - OUT (SLOT2),A - - AND A - RET - -; Вход: -; A - RAM Disk ID -; Выход: -; A - Number (0..15) -; GET_RAMD_NUM: -; EX AF,AF' -; IN A,(SLOT2) -; EX AF,AF' -; LD BC,SYS_PAGE * 256 + SLOT2 -; OUT (C),B - -; LD HL,SYS_PAGE.RAMD_KEYS-#4000 -; LD BC,SYS_PAGE.RAMD_KEYS.NUM -; CPIR - -; EX AF,AF' -; OUT (SLOT2),A -; EX AF,AF' - -; SCF -; RET PE - -; DEC L -; LD A,L -; SUB low SYS_PAGE.RAMD_KEYS -; RET - -; на выходе при А = 0 должен быть установлен флаг Z -GET_RAMD_ST: ; DSS надеется, что эта функция не грохает DE - CP SYS_PAGE.RAMD_KEYS.NUM - CCF - RET C - - PUSH BC - - LD HL,SYS_PAGE.RAMD_KEYS-#4000 - ADD A,L - LD L,A - - IN A,(SLOT2) - LD B,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD C,(HL) - LD A,B - OUT (SLOT2),A - LD A,C - POP BC - AND A - RET - -GET_DRV_ST: - CP 4 - CCF - RET C - - PUSH BC - - LD HL,SYS_PAGE.DISK_TYPE-#4000 - ADD A,L - LD L,A - - IN A,(SLOT2) - LD B,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD C,(HL) - LD A,B - OUT (SLOT2),A - - LD A,C - - POP BC - - AND A - RET - -;*********************************************** -; ????? чё за херня про бейсик? тут не то ниже -; -; CMOS - 35h,36h - установки бейсика -; -;*********************************************** -CMOS_EMU_WR: - PUSH DE - - LD C,SLOT3 - IN B,(C) - LD E,SYS_PAGE - OUT (C),E - LD E,D - LD D,#FF - LD (DE),A - OUT (C),B - - POP DE - RET - -; запись в CMOS -CMOS_WR: - CALL CMOS_TEST - JR C,CMOS_EMU_WR -XWR_CMOS: - LD BC,CMOS.Port.Address.Write - OUT (C),D - LD BC,CMOS.Port.Data.Write - OUT (C),A - RET - -CMOS_EMU_RD: - PUSH DE - - LD C,SLOT3 - IN B,(C) - LD E,SYS_PAGE - OUT (C),E - LD E,D - LD D,#FF - LD A,(DE) - OUT (C),B - - POP DE - RET - -; чтение из CMOS -CMOS_RD: - CALL CMOS_TEST - JR C,CMOS_EMU_RD -XRD_CMOS: - LD BC,CMOS.Port.Address.Write - OUT (C),D - LD BC,CMOS.Port.Data.Read - IN A,(C) - RET - -CMOS_TEST: - - PUSH DE - PUSH BC - PUSH AF - - LD D,3FH ; !HARDCODE - CALL XRD_CMOS - LD E,A - CPL - CALL XWR_CMOS - CALL XRD_CMOS - CPL - CP E - JR NZ,CMOS_ERR - LD A,E - CALL XWR_CMOS - - POP AF - POP BC - POP DE - AND A - RET - -CMOS_ERR: - LD A,E - CALL XWR_CMOS - POP AF - POP BC - POP DE - SCF - RET - -; -;DE - куда - страница открыта! -;BC - сколько -;HL - буфер -; -; PUSH BC -; LD H,D -; LD L,E -; ADD HL,BC -; JR C,CUT -; LD HL,BUFER -; LDIR -; POP BC -; RET -;CUT: -; PUSH HL -; LD A,L -; LD L,C -; LD C,A -; LD A,H -; LD H,B -; LD B,A -; -; AND A -; SBC HL,BC -; LD B,H -; LD C,L -; LD HL,BUFER -; LDIR -; CALL NEXT_BANK -; POP BC -; LD A,B -; OR C -; JR Z,LAB -; LDIR -;LAB: POP BC -; RET -; - -FN_TURBO: - CP 2 - JR Z,.FN_TB_ONOFF - CP 3 - JR Z,.FN_TB_ONOFF - CP #12 - JR Z,.SET_FDD_720 - CP #13 - JR Z,.SET_FDD_1440 - SCF - RET - -;!FIXIT меняем плотность - меняем в системной странице инфу об этом -.SET_FDD_720: - LD A,1 - OUT (#BD),A ; !HARDCODE - AND A - RET -;!FIXIT меняем плотность - меняем в системной странице инфу об этом -.SET_FDD_1440: - LD A,#21 - OUT (#BD),A ; !HARDCODE - AND A - RET - -.FN_TB_ONOFF: - LD C,A - IN A,(SLOT3) - LD B,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD DE,(SYS_PAGE.CONFIG_DE) - LD A,E - AND #FC - OR C - LD E,A - OUT (SYS_PORT.ON),A - LD (SYS_PAGE.CONFIG_DE),DE - LD A,B - OUT (SLOT3),A - AND A - RET - - -; разделить блок памяти на два блока -; A - блок, B - длина первого блока после разделения -; выход: A - блок 1, B - блок 2 -EMM.DivMemBlocks: - INC B - DEC B - SCF - RET Z - DEC B - LD E,A - CALL EMM.GetMemPage ; получить номер страницы блока - RET C - LD D,A - - IN A,(SLOT2) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT2),A - - LD H,high (SYS_PAGE.RAMD_FAT - #4000) - LD L,D - LD A,(HL) - LD (HL),0FFH - LD B,A - - EX AF,AF' - OUT (SLOT2),A - - LD A,E - AND A - RET - -; слить два блока памяти в один -; А - блок 1, B - блок 2 -; выход: А - блок -EMM.MergeMemBlocks: - LD E,A - IN A,(SLOT2) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT2),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000) - LD L,E - LD C,B - LD B,0 -EMM_ADD_L: - LD A,(HL) - AND A - JR Z,EMM_ADD_ERR - CP 0FFH - JR Z,EMM_ADD_NEXT - LD L,A - DJNZ EMM_ADD_L -EMM_ADD_ERR: - EX AF,AF' - OUT (SLOT2),A - SCF - RET - -EMM_ADD_NEXT: - LD A,C - AND A - JR Z,EMM_ADD_ERR - LD (HL),A - EX AF,AF' - OUT (SLOT2),A - AND A - LD A,E - RET -; - - - diff --git a/src/bios/backup/EXP_HDD.as b/src/bios/backup/EXP_HDD.as deleted file mode 100644 index 7e2c1a3..0000000 --- a/src/bios/backup/EXP_HDD.as +++ /dev/null @@ -1,824 +0,0 @@ - -; -; DISPLAY "HDD utility" -/* -P_HD_CS HDW_DRV #4152 -P_CMD HDW_COM #4153 -P_HDST HDR_CTL #4053 -P_S_CNT HDW_CNT #0152 -*/ -;HDD_TYPE EQU 1 ; ????? чё это??? - - MACRO WAIT_HDD -.loop: - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.ControlBit.Busy,A - JR NZ,.loop - ENDM - -;************************************** -;!TEST не нужно если new_api_table -EXP_HDD_NEW: - PUSH AF - LD A,C - CP #10 - ;JR C,EXP_4X.HDD_CMD - JR C,HDD_CMD.4x - POP AF - JP EXP_HDD ; !FIXIT дальше в ROM будут опять проверки старших битов рег. C, уйти как-то от этого - -; MODULE EXP_4X -; !TODO оптимизировать HD_CMD_X -; C - COMAND ( 5 - RD, 6 - WR ) -; 0 - INIT, 1 - DIAG -;HDD_CMD: -;!TEST не нужно если new_api_table -HDD_CMD.4x: - LD A,C ; !!!!! можно убрать, в A и так то, что в C - - AND A - JP Z,FN_HDD_INIT ; #40 Инициализация винчестера - DEC A - JP Z,FN_HDD_RECAL ; #41 Рекалибровка винчестера - DEC A - JP Z,FN_HDD_TEST_IDE ; #42 Тест наличия интерфейса IDE - DEC A - JP Z,FN_HDD_PREPARE ; #43 Подготовка винчестера к операции чтения/записи - DEC A - JP Z,FN_HDD_READ_BPB ; #44 Читать BPB первого раздела - DEC A - JP Z,FN_HDD_READ ; #45 Читать сектора с винчестера - DEC A - JP Z,FN_HDD_WRITE ; #46 Писать сектора на винчестер - DEC A - JP Z,FN_HDD_PART ; #47 set IDE number (Настройка партиций и master/slave)??? - DEC A - JP Z,FN_HDD_READ_NEXT ; #48 Читать следующий сектор (ONLY FOR LBA!) - - POP AF ;!TEST не нужно если new_api_table - SCF - RET -;======================================= - -;-----------------------------------[OK] -HD_BPB_PREP: - LD D,A - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(SYS_PAGE.HD_IDF_ADR.sectors) - LD E,A - EX AF,AF' - OUT (SLOT3),A - LD A,D - LD D,#00 - LD IX,#0000 - LD B,#01 -;--------------------------------------- - -;-----------------------------------[OK] -HD_PREPARE: - PUSH AF - PUSH HL - CALL HD_CALC_SECS - JR NC,HD_PREP_L1 - POP HL - POP AF - SCF - RET -;--------------------------------------- - -;-----------------------------------[OK] -HD_PREP_L1: - LD A,B - LD BC,IDE.Write.Counter ; Установить число секторов для записи - OUT (C),A - - IF IDE_Optimization - INC C ; IDE.Write.Sector - OUT (C),L ; СЕКТОР - INC C ; IDE.Write.CylinderLow - OUT (C),E ; дорожка low - INC C ; IDE.Write.CylinderHigh - OUT (C),D - ELSE - LD BC,IDE.Write.Sector - OUT (C),L ; СЕКТОР - LD BC,IDE.Write.CylinderLow - OUT (C),E ; дорожка low - LD BC,IDE.Write.CylinderHigh - OUT (C),D ; дорожка high - ENDIF - - LD BC,IDE.Read.Control -; DEC B - IN A,(C) - AND #F0 ; !!!!! посмотреть - OR H - INC B ; IDE.Write.DriveCtrl - - OUT (C),A - - POP HL ; BUFER & PAGE - POP AF - AND A - RET -;--------------------------------------- - - -NEXT_ADD_SEC: - PUSH AF - - LD A,B - LD BC,IDE.Write.Counter ; Установить число секторов для записи - OUT (C),A - - IF IDE_Optimization - DEC B - INC C - IN A,(C) ; IDE.Read.Sector - ADC A,E - INC B - OUT (C),A ; IDE.Write.Sector - - DEC B - INC C - IN A,(C) ; IDE.Read.CylinderLow - ADC A,D - INC B - OUT (C),A ; IDE.Write.CylinderLow - - DEC B - INC C - IN A,(C) ; IDE.Read.CylinderHigh - ADC A,0 - INC B - OUT (C),A ; IDE.Write.CylinderHigh - - LD BC,IDE.Read.Control - IN A,(C) - ELSE - LD BC,IDE.Read.Sector - IN A,(C) - ADC A,E - INC B - OUT (C),A ; IDE.Write.Sector - - LD BC,IDE.Read.CylinderLow - IN A,(C) - ADC A,D - INC B - OUT (C),A ; IDE.Write.CylinderLow - - LD BC,IDE.Read.CylinderHigh - IN A,(C) - ADC A,0 - INC B - OUT (C),A ; IDE.Write.CylinderHigh - - LD BC,IDE.Read.Control - IN A,(C) - ENDIF - - LD D,A - ADC A,0 - AND #0F - LD E,A - LD A,D - AND #F0 - OR E - INC B - OUT (C),A ; ????? HEADS?! IDE.Write.DriveCtrl - - POP AF - RET - - -;-----------------------------------[OK] -FN_HDD_PREPARE: ; ПОДГОТОВКА К ВНЕШНИМ ОПЕРАЦИЯМ R/W - POP AF - AND A - INC B - DEC B - RET Z - - CALL HD_WAIT - RET C - - CALL HD_PREPARE - RET C - - EXX - LD C,SLOT3 - IN B,(C) - EXX - OUT (SLOT3),A - EX AF,AF' - - SAFE_PORTY - - LD BC,IDE.Write.Command ; ????? - LD A,#20 ; ????? -; OUT (C),A - AND A ; ????? - - RET -;--------------------------------------- - -;-----------------------------------[OK] -FN_HDD_READ_BPB: - POP AF - CALL HD_WAIT - RET C - CALL HD_BPB_PREP - RET C - - JR HD_RD_L1 -;--------------------------------------- - - -; FOR LBA ONLY - NEXT_READ -FN_HDD_READ_NEXT: -; HL - bufer, A - page -; B - numer of sectors -; DE - add_par (next+DE) (d.b. 1 for NEXT) - POP AF - AND A - INC B - DEC B - RET Z ; ret if 0 sectors - CALL HD_WAIT - RET C - CALL NEXT_ADD_SEC - JR HD_RD_L1 - - -;-----------------------------------[OK] -FN_HDD_READ: - POP AF ; HL - BUFER, A - PAGE !!! - -HD_RD_CMD: - AND A - INC B - DEC B - RET Z - CALL HD_WAIT - RET C - - CALL HD_PREPARE - RET C - -HD_RD_L1: - EXX - LD C,SLOT3 - IN B,(C) - EXX - OUT (SLOT3),A - EX AF,AF' - - SAFE_PORTY - - LD BC,IDE.Write.Command - LD A,#20 - OUT (C),A - -HD_RD_L2: - - WAIT_HDD - - BIT IDE.ControlBit.DataRequest,A - JR NZ,HD_READ_CONT - - ZERO_PORTY - -HD_RET: - EXX - OUT (C),B - EXX - LD BC,IDE.Read.Error - IN A,(C) - AND A - SCF - RET NZ - - EX AF,AF' - AND A - RET -;--------------------------------------- - -;-----------------------------------[OK] -HD_READ_CONT: - LD BC,IDE.Read.Data - -.loop_read1: - DUP 16 - INI ; всего 16 раз INI - оптимально. - EDUP - JP NZ,.loop_read1 -.loop_read2: - DUP 16 - INI ; всего 16 раз INI - оптимально. - EDUP - JP NZ,.loop_read2 - - LD A,H - OR L - JR NZ,HD_RD_L2 - - LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD HL,SYS_PAGE.RAMD_FAT - LD L,A - LD A,(HL) - OUT (SLOT3),A - EX AF,AF' - LD HL,#C000 ; !!!!! - JR HD_RD_L2 -;--------------------------------------- - -;-----------------------------------[OK] -FN_HDD_WRITE: - POP AF ; HL - BUFER, A - PAGE !!! - -HD_WR_CMD: - AND A - INC B - DEC B - RET Z - - CALL HD_WAIT - RET C - CALL HD_PREPARE - RET C - - EXX - LD C,SLOT3 - IN B,(C) - EXX - OUT (SLOT3),A - EX AF,AF' - - LD BC,IDE.Write.Command - LD A,#30 - OUT (C),A - -HD_WR_L2: - WAIT_HDD - - BIT IDE.ControlBit.DataRequest,A - JP Z,HD_RET - -; IF HDD_TYPE = 1 - LD BC,IDE.Write.Data - LD D,32 -HD_WR_LOOP: - DUP 16 - OUTI ; всего 16 раз OUTI - оптимально. - EDUP - - DEC D - JP NZ,HD_WR_LOOP -/* - ELSE - LD BC,P_DATS+#100 - LD D,64 -HD_WR_LOOP: - DUP 4 - INC HL - OUTI - DEC HL - DEC HL - OUTI - INC HL - EDUP - - DEC D - JR NZ,HD_WR_LOOP - ENDIF -*/ - LD A,H - OR L - JR NZ,HD_WR_L2 - - LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD HL,SYS_PAGE.RAMD_FAT - LD L,A - LD A,(HL) - OUT (SLOT3),A - EX AF,AF' - LD HL,#C000 ;!!!!! - JR HD_WR_L2 -;--------------------------------------- - -;-----------------------------------[OK] -FN_HDD_RECAL: - POP AF -HD_CMD1_EX: - LD A,#A0 - LD BC,IDE.Write.DriveCtrl - OUT (C),A - LD A,#90 ; DIAGNOSTICS - CALL HD_CMD_EXE - AND A - BIT IDE.ControlBit.Error,A - RET Z - LD BC,IDE.Read.Error - IN A,(C) - CP 1 ; !!!!! глянуть - RET Z - SCF - RET -;--------------------------------------- - -;-----------------------------------[OK] -FN_HDD_TEST_IDE: - POP AF - LD E,#00 - LD BC,IDE.Write.DriveCtrl - LD A,#A0 ; !!!!! глянуть - OUT (C),A - - CALL TEST_HDD_DRV - - JR NZ,NO_HDD1 - SET 0,E -NO_HDD1: - LD BC,IDE.Write.DriveCtrl - LD A,#B0 ; !!!!! глянуть - OUT (C),A - - CALL TEST_HDD_DRV - - JR NZ,NO_HDD2 - SET 1,E -NO_HDD2: - LD A,E - AND A - SCF - RET Z ; HDD absent ! - AND A - RET -;--------------------------------------- - - -;-----------------------------------[DIFFERENT] -; Не должна портить регистр E!!! -TEST_HDD_DRV: -; EXP_HDD.ASM variant - LD HL,#01FE ; ????? - LD BC,IDE.Write.Counter - OUT (C),L - IF IDE_Optimization - INC C - OUT (C),H ; IDE.Write.Sector - - DEC C - INC B - IN A,(C) ; ????? IDE.Write.Counter+#100 - CP L - RET NZ - INC C - - ELSE - LD BC,IDE.Write.Sector - OUT (C),H - LD BC,IDE.Write.Counter+#100 - IN A,(C) - CP L - RET NZ - LD BC,IDE.Write.Sector+#100 - ENDIF - - IN A,(C) ; ????? IDE.Write.Sector+#100 - CP H - RET -/* -TEST_HDD_DRV: -; EXTENDED.ASM variant - LD HL,#00FF ;???!!!! - LD BC,IDE.Write.CylinderLow - OUT (C),L - IF IDE_Optimization - INC C - OUT (C),H ; IDE.Write.CylinderHigh - - INC B - DEC C - IN A,(C) ; ????? Тут регистр BC = #0254 - что за порт такой и что оттуда прочитается? - CP L - RET NZ - INC C - - ELSE - LD BC,IDE.Write.CylinderHigh - OUT (C),H - LD BC,#0254 ;???!!!! - IN A,(C) - CP L - RET NZ - LD BC,#0255 ;???!!!! - ENDIF - - IN A,(C) ; ????? Тут регистр BC = #0255 - что за порт такой и что оттуда прочитается? - CP H - RET -*/ -;--------------------------------------- - - -;-----------------------------------[OK] -FN_HDD_INIT: - POP AF - LD BC,IDE.Write.DriveCtrl - LD A,#A0 - OUT (C),A - CALL TEST_HDD_DRV - JR NZ,HD_ABSENT -HD_C0_L3: - WAIT_HDD - - LD BC,IDE.Write.Command - LD A,#EC ; !HARDCODE - OUT (C),A - - WAIT_HDD - - BIT IDE.ControlBit.DataRequest,A - JR NZ,HD_C0_L2 - SCF - RET -;--------------------------------------- - -;-----------------------------------[OK] -HD_ABSENT: - LD BC,IDE.Write.DriveCtrl - LD A,#B0 ; !HARDCODE - OUT (C),A - CALL TEST_HDD_DRV - JR Z,HD_C0_L3 - SCF - RET -;--------------------------------------- - -;-----------------------------------[OK] -HD_C0_L2: - LD BC,IDE.Read.Data - LD HL,SYS_PAGE.HD_IDF_ADR - IN A,(SLOT3) - LD D,A - LD A,SYS_PAGE - OUT (SLOT3),A - INIR - INIR - LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; число секторов - LD C,A - LD HL,0 - LD B,H - LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; число головок -.loop: - ADD HL,BC - DEC A - JR NZ,.loop - LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL - - WAIT_HDD - - LD BC,IDE.Read.Control -; DEC B - IN A,(C) - AND #10 - LD B,A - LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; число головок - - DEC A - AND #0F - OR #A0 - OR B - - LD H,A - LD A,(SYS_PAGE.HD_IDF_ADR+99) ; ????? LBA? - BIT 1,A - JR Z,HD_C0_NO_LBA - SET 6,H - -HD_C0_NO_LBA: - LD BC,IDE.Write.DriveCtrl - OUT (C),H - - LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; число секторов - - LD BC,IDE.Write.Counter - OUT (C),A - LD A,D - OUT (SLOT3),A - - LD A,#91 ; SET HDD PARAMETERS - CALL HD_CMD_EXE - RET - -; RET C -; LD A,1FH ; RECALIBRATE -; CALL HD_CMD_EXE -; RET -;--------------------------------------- - -;-----------------------------------[OK] -HD_CMD_EXE: - CALL HD_WAIT - RET C - LD BC,IDE.Write.Command - OUT (C),A -HD_WAIT: - PUSH DE - PUSH BC - PUSH AF - LD DE,0 -HD_WAIT1: - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.ControlBit.Busy,A - JR Z,HD_W_EXIT - DEC DE - LD A,D - OR E - JR NZ,HD_WAIT1 - POP AF - POP BC - POP DE - SCF - RET -;--------------------------------------- - -;-----------------------------------[OK] -HD_W_EXIT: - POP AF - POP BC - POP DE - AND A - RET -;--------------------------------------- - - -;-----------------------------------[DIFFERENT] -/* -;EXTENDED.ASM Version - -HDD_LBA: ;???!!!! - POP BC - LD L,E - LD E,D - LD D,XL - XOR A - LD H,A - RET - -HD_CALC_SECS: - LD A,XH - AND A - SCF - RET NZ ; ошибка, слишком большой HDD - - PUSH BC - LD BC,IDE.Write.DriveCtrl - DEC B - IN A,(C) - BIT 6,A - JR NZ,HDD_LBA -; POP BC ;!!!!! посмотреть -*/ - -;EXP_HDD.ASM Version -HDD_LBA: - POP BC - LD L,E - LD E,D - LD D,XL - LD A,XH - AND #0F ; XOR A ????? разобраться - LD H,A - RET - -HD_CALC_SECS: - PUSH BC - LD BC,IDE.Read.Control -; DEC B - IN A,(C) - BIT 6,A - JR NZ,HDD_LBA - POP BC ; снимаем значение для корректного ret - - LD A,XH - AND A - SCF - RET NZ ; ошибка, слишком большой HDD -;--------------------------------------- - - -;-----------------------------------[OK] -; IX,DE - абсолютный номер сектора - PUSH IX - POP HL - - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,C - LD (SYS_PAGE.COPY_SLOT3),A - -; HL,DE - номер сектора -; BC - число секторов на цилиндре - LD BC,(SYS_PAGE.HD_IDF_ADR.sec_cyl) ; число секторов на цилиндре - LD A,16 ; HL,DE разделить на BC - SCF -DIV_LOOP: - EX DE,HL - ADD HL,HL - EX DE,HL - ADC HL,HL - - SBC HL,BC ; сравнить HL и BC - JR NC,NO_ADD ; переноса не было - +1! - ADD HL,BC - DEC A - JR NZ,DIV_LOOP - JR DIV_END -NO_ADD: - INC DE - DEC A - JR NZ,DIV_LOOP -DIV_END: -; DE - результат, HL - остаток -; DE - цилиндр - LD A,(SYS_PAGE.HD_IDF_ADR+12) ; !HARDCODE .sectors -; A - число секторов на дорожке -; HL - номер сектора в цилиндре - LD B,0 - LD C,A -; LD BC,(MS_BPB+S_P_T) ; ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ - XOR A -HD_CALC_LOOP2: - SBC HL,BC - INC A - JR NC,HD_CALC_LOOP2 - - DEC A ; A - головка - ADD HL,BC ; L - сектор - INC L - LD H,A ; HL - HEAD,SEC - - LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A - - AND A - RET -;--------------------------------------- - - -FN_HDD_PART: - POP AF - BIT 0,A - LD A,#21 ; !HARDCODE - JR Z,IDE_1 - LD A,#01 ; !HARDCODE -IDE_1: - OUT (#BC),A ;!!!!! посмотреть - RET - -; ENDMODULE -;************************************************ - -; ????? -; DB 'HDD_DRV_END' -; Вход: -; C - команда -; 0 - INIT - входных пар нет => A - число поддерживаемых дисков. -; 1 - RESET - выбор диска A - номер диска от 0 => -; 2 - (STATUS) !!!!! TEST? -; 3 - MEDIA CHECK - A - номер диска => A = 0 - old. #FF - new (всегда #FF) !!!!! PREPARE??? -; 4 - READ BPB - A - диск HL - адрес в текущей странице. -; 5 - READ - A - диск, IX:DE сектор, HL - адрес, B - число секторов -; 6 - WRITE - '' - -; 7 - PART -; 8 - READ_NEXT -; -; ошибки - CF - A - ошибка -; -; 0 - нет ошибки -; 1 - неверная команда -; 2 - неверный номер диска -; 3 - неверный формат (не MS-DOS) -; 4 - нет готовности -; 5 - ошибка позиционирования -; 6 - сектор не найден -; 7 - ошибка CRC -; 8 - защита записи -; 9 - ошибка чтения -; 10 - ошибка записи -; 11 - ГЛЮК -; \ No newline at end of file diff --git a/src/bios/backup/EXTENDED.as b/src/bios/backup/EXTENDED.as deleted file mode 100644 index 96791b7..0000000 --- a/src/bios/backup/EXTENDED.as +++ /dev/null @@ -1,474 +0,0 @@ - -; -; It's disk drive BIOS extender for functions 5xh. -;--------------------------------------------------------------- -;Version! Description -;--------------------------------------------------------------- -; 2.32 ! Removed `DI' Disabled Interupt instruction in HDRIVER6 -; ! function load sectors. -; ! Fixed bug waiting slave device in AUTOIDE. - -;SPRINTER EQU 97 -;SPRINTER EQU 2000 -; DEVICE ZXSPECTRUM4096 - -/* -;HDD_TYPE EQU 1 - MACRO WAIT_HDD -.LL1: - LD BC,P_HDST - IN A,(C) - BIT 7,A - JR NZ,.LL1 - ENDM -*/ - -; ORG #0000 - -; INCLUDE '../VERSION.INC' -; INCLUDE '../BIOS.INC' - -;VER EQU 2 ;Version disk subsystem -;MOD EQU 40 - -;PAGE1 EQU #A2 -;PAGE2 EQU #C2 -;INT_ADRESS EQU #C124 -;INT_PAGE EQU #C126 -;INT_ID EQU #C127 -;BIOS EQU #3FD0 -; DS #3FD0,#FF - -;------------[Begin of ROM]------------- -ROM_START: - DI - HALT -;--------------------------------------- - -;--------------[checksum]--------------- - BLOCK 4-$,#FF -Check_Sum: - DB #FF,#FF,#FF,#FF ; место для контрольной суммы -;--------------------------------------- - BLOCK #10-$,#FF - RET -;--------------------------------------- - -;----------------[int]------------------ - BLOCK #38-$,#FF - -INT: - PUSH HL - 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: - LD HL,(SYS_PAGE.INT_ADRESS) - LD A,H - OR L - LD A,(SYS_PAGE.INT_PAGE) - OUT (C),B - CALL NZ,EXTINT -NOINT: - POP AF - POP BC - POP HL - EI - RETI -;--------------------------------------- - -;----------------[NMI]------------------ - _mInfoBLOCK #66-$,#FF -NMI: - RETN -;--------------------------------------- - -;----------------[int]------------------ -EXTINT: - OR A - RET Z - LD C,SLOT1 - BIT 7,H - JR Z,L1 - 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 -JPHL: - JP (HL) -;--------------------------------------- - -; -;!TEST не нужно если new_api_table -HDD_FN_5x: - POP AF - CALL HDD_CMD.FN5X - JP RET_TO_EXP - - ;HD_CMD_X - ;!TEST не нужно если new_api_table -HDD_CMD_4X: - SET 6,C - CALL ToBIOS_FromEXT - RET - - - -; !TODO ; !FIXIT -; ; SCF -; ; BIT 7,C -; !FIXIT -;!TEST не нужно если new_api_table -HDD_CMD: - push af ; RET NZ - ld a,%00011111 ; BIT 6,C - sub c ; RET NZ - jp c,.exit ; BIT 5,C - pop af ; RET NZ - BIT 4,C - JP Z,HDD_CMD_4X ; 4xh functions ;C < #10 ; !TEST new_api -; 5xh functions #C0 - CD ROM, #80 - HARD DISK, #60 - RAM DISK, #00 - FLOPPY DISK -.FN5X: - RES 4,C ;C >= #10 - INC C - DEC C - JP Z,.RESERVED ;#50 - DEC C - JP Z,DRV_RESET ;#51 - Reset drive - DEC C - JP Z,DRV_READ_LONG ;#52 - Long read - DEC C - JP Z,DRV_WRITE_LONG ;#53 - Long write - DEC C - JP Z,DRV_VERIFY ;#54 - Verify sectors - DEC C - JP Z,DRV_READ ;#55 - Read sectors - DEC C - JP Z,DRV_WRITE ;#56 - Write sectors - DEC C - JP Z,DRV_DETECT ;#57 - Detect - DEC C - JP Z,DRV_GET_PAR ;#58 - Get Media parameters - DEC C - JP Z,DRV_SET_PAR ;#59 - Set Media parameters - DEC C - JP Z,DRV_VERSION ;#5A - Version number - DEC C - JP Z,.RESERVED ;#5B - DEC C - JP Z,.RESERVED ;#5C - DEC C - JP Z,.RESERVED ;#5D - DEC C - JP Z,.RESERVED ;#5E - DEC C - JP Z,DRV_CONFIG ;#5F - Configuration -.RESERVED: - LD A,1 ;!HARDCODE error code - SCF - RET -.exit: POP AF - SCF - RET - -DRV_VERSION: - LD HL,0 - LD BC,0 - LD DE,Disk_subsystem_ver_hex - AND A - RET - -DRV_CONFIG: ; ????? что за функция и куда указывает IX - IN A,(SLOT3) - PUSH AF - PUSH IY - LD A,SYS_PAGE - OUT (SLOT3),A - LD (IX+0),#04 - LD (IX+1),#00 ;FDD COUNT - LD (IX+2),#00 ;HDD COUNT - LD (IX+3),#00 ;CDD COUNT - LD (IX+4),#00 ;END CODE -;Calculating FDD devices - LD HL,FDD_INI_TABLE.FDD_0 - INC (IX+1) - LD B,8 - LD A,#FF -TFD0: - CP (HL) - INC HL - JR NZ,YYYFD0 - DJNZ TFD0 - DEC (IX+1) -YYYFD0: - LD HL,FDD_INI_TABLE.FDD_1 - INC (IX+1) - LD B,8 - LD A,#FF -TFD1: - CP (HL) - INC HL - JR NZ,YYYFD1 - DJNZ TFD1 - DEC (IX+1) -YYYFD1: -;Calculating IDE devices - LD IY,IDE.INIT_TBL_IDE0 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,ABSIDE0 - CP IDE.Device.HDD - JR NZ,NOT_HD0 - INC (IX+2) -NOT_HD0: - CP IDE.Device.CDROM - JR NZ,NOT_CD0 - INC (IX+3) -NOT_CD0: -ABSIDE0: - LD IY,IDE.INIT_TBL_IDE1 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,ABSIDE1 - CP IDE.Device.HDD - JR NZ,NOT_HD1 - INC (IX+2) - -NOT_HD1: - CP IDE.Device.CDROM - JR NZ,NOT_CD1 - INC (IX+3) -NOT_CD1: -ABSIDE1: - LD IY,IDE.INIT_TBL_IDE2 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,ABSIDE2 - CP IDE.Device.HDD - JR NZ,NOT_HD2 - INC (IX+2) -NOT_HD2: - CP IDE.Device.CDROM - JR NZ,NOT_CD2 - INC (IX+3) -NOT_CD2: -ABSIDE2: - LD IY,IDE.INIT_TBL_IDE3 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,check_exit - CP IDE.Device.HDD - JR NZ,NOT_HD3 - INC (IX+2) -NOT_HD3: - CP IDE.Device.CDROM - JR NZ,check_exit - INC (IX+3) -check_exit: - POP IY - POP AF - OUT (SLOT3),A - XOR A - RET - -DRV_RESET: - CP #10 - JP C,FDD_5x.RESET -; CP #60 -; JP C,.error -; CP #70 -; JP C,RESETR - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.RESET - CP #C0 - JP C,.error - CP #D0 - JP C,CD_5x.RESET -.error: - LD A,#AA - SCF - RET - -DRV_READ_LONG: - CP #10 - JP C,FDD_5x.LONG_READ - CP #60 - JP C,.error - CP #70 - JP C,RMD_5x.LONG_READ - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.LONG_READ - CP #C0 - JP C,.error - CP #D0 - JP C,CD_5x.LONG_READ -.error: - LD A,#AA - SCF - RET - -DRV_WRITE_LONG: - CP #10 - JP C,FDD_5x.LONG_WRITE - CP #60 - JP C,.error - CP #70 - JP C,RMD_5x.LONG_WRITE - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.LONG_WRITE -; CP #C0 -; JP C,.error -; CP #D0 -; JP C,LWRITEC -.error: - LD A,#AA - SCF - RET - -DRV_READ: - CP #10 ; !HARDCODE поназывать бы все ID - JP C,FDD_5x.READ - CP #60 - JP C,.error - CP #70 - JP C,RMD_5x.READ - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.READ - CP #C0 - JP C,.error - CP #D0 - JP C,CD_5x.READ -.error: - LD A,#AA - SCF - RET - -DRV_WRITE: - CP #10 - JP C,FDD_5x.WRITE - CP #60 - JP C,.error - CP #70 - JP C,RMD_5x.WRITE - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.WRITE -; CP #C0 -; JP C,.error -; CP #D0 -; JP C,WRITEC -.error: - LD A,#AA - SCF - RET - -DRV_VERIFY: -; CP #10 -; JP C,VERIFYD -; CP #60 -; JP C,.error -; CP #70 -; JP C,VERIFYR - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.VERIFY -; CP #C0 -; JP C,.error -; CP #D0 -; JP C,VERIFYC -.error: - LD A,#AA - SCF - RET - -DRV_DETECT: - CP #10 - JP C,FDD_5x.DETECT -; CP #60 -; JP C,.error -; CP #70 -; JP C,DETECTR -; CP #80 -; JP C,.error -; CP #90 -; JP C,DETECTH - CP #C0 - JP C,.error - CP #D0 - JP C,CD_5x.DETECT -.error: - LD A,#AA - SCF - RET - -DRV_GET_PAR: - CP #10 - JP C,FDD_5x.GETMED - CP #60 - JP C,.error - CP #70 - JP C,RMD_5x.GETMED - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.GETMED -.error: - LD A,#AA - SCF - RET - -DRV_SET_PAR: - CP #10 - JP C,FDD_5x.SETMED - CP #60 - JP C,.error - CP #70 - JP C,RMD_5x.SETMED - CP #80 - JP C,.error - CP #90 - JP C,HDD_5x.SETMED -.error: - LD A,#AA - SCF - RET -; - - INCLUDE 'src/bios/ROM/EXTENDED/FDD_DRIVER_2.asm' - INCLUDE 'src/bios/ROM/EXTENDED/RAM_DISK_DRIVER_1.asm' - INCLUDE 'src/bios/ROM/EXTENDED/HDD_DRIVER_6.asm' - INCLUDE 'src/bios/ROM/EXTENDED/CD_DRIVER_0.asm' - -;01000h SETUP - -; ORG #9000 -; INCBIN "BSETUP.BIN" -; INCLUDE "ENDROM.ASM" -; \ No newline at end of file diff --git a/src/bios/backup/ROM.as b/src/bios/backup/ROM.as deleted file mode 100644 index ffd6f9c..0000000 --- a/src/bios/backup/ROM.as +++ /dev/null @@ -1,135 +0,0 @@ -;-----------[#0000 Extended]------------ - INCLUDE 'src/bios/rom/EXTENDED/EXTENDED.asm' -;--------------------------------------- - DISPLAY " EXTENDED end addr: ", /A, $ - -;-------------[#1000 SETUP]------------- - ShowInfo 'Setup block of ROM start', 0 ; !!!!! test - -BLOCK_Setup EQU $ - - IF PACKED_MAIN - BLOCK ROM_MAP.SETUP-$,#FF - - DISP COMPILE_ADDR.SETUP - -; Depacker version -SETUP_MAIN: - LD HL,DEPACKER.UnpackedEXECaddr; точка входа в распакованном коде - PUSH HL - LD DE,DEPACKER.WorkAddr ; адрес процедуры депакера - PUSH DE - - LD HL,DEPACKER.Addr - LD BC,DEPACKER.Length - LDIR - - LD HL,DEPACKER.PackedMAIN ; где архив - LD DE,DEPACKER.UnpackAddr ; куда распаковывать - RET - -.Depacker EQU $ - ENT - -;-----------------[v] -DEPACK_DATA: - DISP DEPACKER.WorkAddr - MODULE UnPacker - INCLUDE 'src/bios/ROM/SETUP/DEHRUST.asm' ; !TODO сделать на LUA автовыбор декомпрессора и компрессора -PackedMAIN: INCBIN 'Build/Bin/temp/MAIN.PAK' - ENDMODULE - ENT -DEPACK_DATA.length EQU $-DEPACK_DATA -;-----------------[^] - - - ELSE - DISP COMPILE_ADDR.SETUP - ShowInfo 'Setup block DISP start', 1 ; !!!!! test -SETUP_MAIN: INCLUDE 'src/bios/ROM/SETUP/Main.asm' - ShowInfo 'Setup block DISP end', 1 ; !!!!! test - ENT - ENDIF - - - ShowInfo 'Setup block of ROM end', 0 ; !!!!! test -BLOCK_Setup.Length EQU $-BLOCK_Setup -;--------------------------------------- - - -;*************************************** -; -; !TODO можно оприходовать тут сколько-то байтов -; DISPLAY 'Address in ROM with ', /D, ToBIOS_FromEXT-$, ' free bytes: ',/H,$ -;*************************************** -; -;---------------[SET EXP]--------------- - _mInfoBLOCK ToBIOS_FromEXT-$,#FF ; #3FD0 -; call exp bios from setup -;RST18h: - PUSH AF - LD A,ROM.EXT ; set exp-rom to slot0 - OUT (SYS_PORT.ON),A - POP AF - RET -;--------------------------------------- - - - -;--------[ From TR-DOS to HDD part2]-------- - _mInfoBLOCK #3FD8-$,#FF -TRDOS_HD_CMD: -// JP L0107 - POP AF - CALL HDD_CMD ; !TEST new_api - JP RET_TO_TRDOS -;--------------------------------------- - - - -;-------------[SND_TEST_RET]------------- - _mInfoBLOCK #3FE0-$,#FF -SND_TEST_RET: - LD A,ROM.EXT - OUT (SYS_PORT.OFF),A -; JP SOUND_TEST - JP #0000 -;--------------------------------------- - - -;!TEST не нужно если new_api_table -;------------[HDD_5x portal]------------ -; точка входа/выхода для функций 5х из EXP - _mInfoBLOCK #3FE8-$,#FF -RET_TO_EXP: - PUSH AF - LD A,ROM.EXT - OUT (SYS_PORT.ON),A - JP HDD_FN_5x -;--------------------------------------- - - -;!FIXIT эта точка входа очень странная из страницы в страницу прыгает -;---------[ From TR-DOS to HDD ]-------- - _mInfoBLOCK #3FF0-$,255 -RET_TO_TRDOS: - PUSH AF - DI - LD A,ROM.EXT - OUT (SYS_PORT.OFF),A - JR TRDOS_HD_CMD ; тут не хватило места в 1 байт, чтоб сразу сделать JP -;--------------------------------------- - - - -;-----[???????????????????????????]----- - _mInfoBLOCK #3FF8-$,255 -A3FF8: PUSH AF - LD A,ROM.EXT - OUT (SYS_PORT.OFF),A -; !FIXIT может убрать заглушку и сделать, чтоб переключалось на EXP и дальше как в EXP_FNS_RET ? -; или своего чего-нибудь добавить. - JP #0000 -;--------------------------------------- -; $ = #4000 -;======================================= diff --git a/src/bios/exp/DCP.ASM b/src/bios/exp/DCP.ASM index 9786e82..5ab4b24 100644 --- a/src/bios/exp/DCP.ASM +++ b/src/bios/exp/DCP.ASM @@ -16,7 +16,7 @@ ; ....0..11.1110 ; WORD %00000001101110 ; - адрес ; WORD %00001001101111 ; - маска - 0 изменяемые биты, 1 неизменяемые -; BYTE Conf_port.Border_FE ; - порт +; BYTE ACEX.Border_FE ; - порт ; DCP END MARKER ; DW 0,0,0 @@ -25,126 +25,125 @@ ; ;-----------------------------------------------------------------------; -; VG93 Ports DW %00000000000111 DW %00010001101111 - DB Conf_port.VG93_1F + DB ACEX.VG93_1F DW %11010000000111 DW %11010001101111 - DB Conf_port.VG93_1F -;ok + DB ACEX.VG93_1F + DW %00000000100111 DW %00010001101111 - DB Conf_port.VG93_3F + DB ACEX.VG93_3F DW %11010000100111 DW %11010001101111 - DB Conf_port.VG93_3F -;ok + DB ACEX.VG93_3F + DW %00000001000111 DW %00010001101111 - DB Conf_port.VG93_5F + DB ACEX.VG93_5F DW %11010001000111 DW %11010001101111 - DB Conf_port.VG93_5F -;ok + DB ACEX.VG93_5F + DW %00000001100111 DW %00010001101111 - DB Conf_port.VG93_7F + DB ACEX.VG93_7F DW %11010001100111 DW %11010001101111 - DB Conf_port.VG93_7F -;ok + DB ACEX.VG93_7F + DW %00000001101111 DW %00011001101111 - DB Conf_port.VG93_State + DB ACEX.VG93_State DW %11010001101111 DW %11011001101111 - DB Conf_port.VG93_State + DB ACEX.VG93_State ; For joystick DW %00011000000111 DW %10011001101111 - DB Conf_port.JOY_VG93 + DB ACEX.JOY_VG93 DW %10011000000111 DW %11011001101111 - DB Conf_port.JOY_VG93 + DB ACEX.JOY_VG93 ; For VG93 with dos on DW %00001001101111 DW %00011001101111 - DB Conf_port.JOY_VG93 + DB ACEX.JOY_VG93 ; For VG93 with dos off DW %11011001101111 DW %11011001101111 - DB Conf_port.JOY_VG93 -;ok + DB ACEX.JOY_VG93 + DW %00000000101101 DW %11011111111111 - DB Conf_port.FDD720 + DB ACEX.FDD720 DW %11000000101101 DW %11001111111111 - DB Conf_port.FDD720 -;ok + DB ACEX.FDD720 + DW %00000000111101 DW %11011111111111 - DB Conf_port.FDD144 + DB ACEX.FDD144 DW %11000000111101 DW %11001111111111 - DB Conf_port.FDD144 + DB ACEX.FDD144 ;!FIXIT UNKNOWN PORTS--------------------------------------------------; dos on, только через BC, чтение/запись -;ok DW %10000100101101 DW %11010111111111 DB #18 -;ok + DW %10000100111101 DW %11010111111111 DB #19 -;ok + DW %10000110101101 DW %11010111111111 DB #1A ;----------------------------------------------------------------------; -;ok + DW %00000100101101 DW %11001111111111 - DB #1B + DB ACEX.ISA_CTRL DW %10000110111101 DW %11010111111111 - DB #1B + DB ACEX.ISA_CTRL DW %11000100101101 DW %11001111111111 - DB #1B -;ok + DB ACEX.ISA_CTRL + DW %00001100111101 DW %11001101111111 - DB #1C + DB ACEX.CMOS_DATA.READ DW %11001100111101 DW %11001101111111 - DB #1C -;ok + DB ACEX.CMOS_DATA.READ + DW %00000110101101 DW %11001111111111 - DB #1D + DB ACEX.CMOS_ADDR.WRITE DW %11000110101101 DW %11001111111111 - DB #1D -;ok + DB ACEX.CMOS_ADDR.WRITE + DW %00000100111101 DW %11001101111111 - DB #1E + DB ACEX.CMOS_DATA.WRITE DW %11000100111101 DW %11001101111111 - DB #1E -;ok + DB ACEX.CMOS_DATA.WRITE +; +;---------HDD[v] DW %00000001000000 DW %11000001101111 DB #20 DW %01000001000000 DW %11010001101111 DB #20 -;ok + DW %10000001000000 DW %11010001101111 DB #20 @@ -152,7 +151,6 @@ DW %11000001101111 DB #20 -;ok DW %00000001000001 DW %00010111101111 DB #21 @@ -162,7 +160,7 @@ DW %11010001000001 DW %11010111101111 DB #21 -;ok + DW %00000001000010 DW %00010111101111 DB #22 @@ -172,7 +170,7 @@ DW %11010001000010 DW %11010111101111 DB #22 -;ok + DW %00000001000011 DW %00010111101111 DB #23 @@ -182,7 +180,7 @@ DW %11010001000011 DW %11010111101111 DB #23 -;ok + DW %00000001000100 DW %00010111101111 DB #24 @@ -193,7 +191,6 @@ DW %11010111101111 DB #24 -;ok DW %00000001000101 DW %00010111101111 DB #25 @@ -204,7 +201,6 @@ DW %11010111101111 DB #25 -;ok DW %00000011000010 DW %00010111101111 DB #26 @@ -214,7 +210,7 @@ DW %11010011000010 DW %11010111101111 DB #26 -;ok + DW %00000011000011 DW %00010111101111 DB #27 @@ -224,233 +220,232 @@ DW %11010011000011 DW %11010111101111 DB #27 -;ok +;---------HDD[^] +; DW %00000011000100 DW %00010111101111 - DB Conf_port.IDE_CONTROL_3F6 + DB ACEX.IDE_CONTROL_3F6 DW %00010011000100 DW %11010111101111 - DB Conf_port.IDE_CONTROL_3F6 + DB ACEX.IDE_CONTROL_3F6 DW %11010011000100 DW %11010111101111 - DB Conf_port.IDE_CONTROL_3F6 -;ok + DB ACEX.IDE_CONTROL_3F6 + DW %00000011000101 DW %00010111101111 - DB Conf_port.IDE_STATUS_3F7 + DB ACEX.IDE_STATUS_3F7 DW %00010011000101 DW %11010111101111 - DB Conf_port.IDE_STATUS_3F7 + DB ACEX.IDE_STATUS_3F7 DW %11010011000101 DW %11010111101111 - DB Conf_port.IDE_STATUS_3F7 -;ok + DB ACEX.IDE_STATUS_3F7 + DW %00000000101100 DW %11001111111111 - DB Conf_port.IDE_CHANEL_1 + DB ACEX.IDE_CHANEL_1 DW %11000000101100 DW %11001111111111 - DB Conf_port.IDE_CHANEL_1 -;ok + DB ACEX.IDE_CHANEL_1 + DW %00000000111100 DW %11001111111111 - DB Conf_port.IDE_CHANEL_2 + DB ACEX.IDE_CHANEL_2 DW %11000000111100 DW %11001111111111 - DB Conf_port.IDE_CHANEL_2 -;ok + DB ACEX.IDE_CHANEL_2 + DW %00000010101101 DW %11001111111111 - DB Conf_port.VSYNC320 + DB ACEX.VSYNC320 DW %11000010101101 DW %11001111111111 - DB Conf_port.VSYNC320 -;ok + DB ACEX.VSYNC320 + DW %00000010111101 DW %11001111111111 - DB Conf_port.VSYNC312 + DB ACEX.VSYNC312 DW %11000010111101 DW %11001111111111 - DB Conf_port.VSYNC312 -;ok + DB ACEX.VSYNC312 + DW %00000010101100 DW %11001111111111 - DB Conf_port.RESET + DB ACEX.RESET DW %11000010101100 DW %11001111111111 - DB Conf_port.RESET -;ok + DB ACEX.RESET + DW %00000010111100 DW %11001111111111 - DB Conf_port.UNKNOWN ;!FIXIT можно пока убрать + DB ACEX.UNKNOWN ;!FIXIT можно пока убрать DW %11000010111100 DW %11001111111111 - DB Conf_port.UNKNOWN ;!FIXIT можно пока убрать -;ok + DB ACEX.UNKNOWN ;!FIXIT можно пока убрать + DW %00010000101011 DW %11010001101011 - DB Conf_port.ISA_Control -;ok + DB ACEX.ISA_Control ;!FIXIT можно пока убрать ??? + DW %00011001101110 DW %10011001101111 - DB Conf_port.ZX_Keyboard + DB ACEX.ZX_Keyboard DW %10011001101110 DW %11011001101111 - DB Conf_port.ZX_Keyboard -;ok + DB ACEX.ZX_Keyboard + DW %00001111111101 DW %00001111111111 - DB Conf_port.AY_FFFD_READ -;ok + DB ACEX.AY_FFFD_READ + DW %00001111011111 DW %11001111111111 - DB Conf_port.Kempston_Mouse + DB ACEX.Kempston_Mouse DW %11001111011111 DW %11001111111111 - DB Conf_port.Kempston_Mouse -;ok + DB ACEX.Kempston_Mouse + DW %00011001100011 DW %11011001101111 - DB Conf_port.CBL_OUT + DB ACEX.CBL_OUT DW %01010001100011 DW %11010001101111 - DB Conf_port.CBL_OUT + DB ACEX.CBL_OUT DW %10010001100011 DW %11010001101111 - DB Conf_port.CBL_OUT + DB ACEX.CBL_OUT DW %00010000000111 DW %11011000001111 - DB Conf_port.CBL_OUT + DB ACEX.CBL_OUT DW %00011000001000 DW %11011001101111 - DB Conf_port.CBL_OUT + DB ACEX.CBL_OUT DW %00010001101011 DW %10010001101111 - DB Conf_port.CBL_OUT + DB ACEX.CBL_OUT DW %10010001101011 DW %11010001101111 - DB Conf_port.CBL_OUT -;ok + DB ACEX.CBL_OUT + DW %00000001000110 DW %11001111111111 - DB Conf_port.CBL_SYS_PORT + DB ACEX.CBL_SYS_PORT DW %11000001000110 DW %11001111111111 - DB Conf_port.CBL_SYS_PORT -;ok + DB ACEX.CBL_SYS_PORT + DW %00000111111101 DW %00001111111111 - DB Conf_port.AY_FFFD_WRITE -;ok + DB ACEX.AY_FFFD_WRITE + DW %00000101111101 DW %00001111111111 - DB Conf_port.AY_BFFD -;ok + DB ACEX.AY_BFFD + DW %00000001101101 DW %10000111111111 - DB Conf_port.Scorp_1FFD + DB ACEX.Scorp_1FFD DW %11000001101101 DW %11000111111111 - DB Conf_port.Scorp_1FFD -;ok + DB ACEX.Scorp_1FFD + DW %00000011101101 DW %00100111101111 - DB Conf_port.Pent_7FFD + DB ACEX.Pent_7FFD DW %00100011101101 DW %11110111101111 - DB Conf_port.Pent_7FFD + DB ACEX.Pent_7FFD DW %11100011101101 DW %11100111101111 - DB Conf_port.Pent_7FFD + DB ACEX.Pent_7FFD DW %10000001101101 DW %11100111101111 - DB Conf_port.Pent_7FFD -;ok + DB ACEX.Pent_7FFD + DW %00000001101110 DW %00001001101111 - DB Conf_port.Border_FE -;ok + DB ACEX.Border_FE + DW %00000001010110 DW %11001111111111 - DB Conf_port.ALL_MODE + DB ACEX.ALL_MODE DW %11000001010110 DW %11001111111111 - DB Conf_port.ALL_MODE -;ok + DB ACEX.ALL_MODE + DW %00000000001001 DW %00010001101111 - DB Conf_port.PORT_Y + DB ACEX.PORT_Y DW %00010000001001 DW %11010001101111 - DB Conf_port.PORT_Y + DB ACEX.PORT_Y DW %11010000001001 DW %11010001101111 - DB Conf_port.PORT_Y -;ok + DB ACEX.PORT_Y + DW %00000001001001 DW %00010001101111 - DB Conf_port.RGMOD + DB ACEX.RGMOD DW %00010001001001 DW %11010001101111 - DB Conf_port.RGMOD + DB ACEX.RGMOD DW %11010001001001 DW %11010001101111 - DB Conf_port.RGMOD -;ok + DB ACEX.RGMOD + DW %00000000100100 DW %00000000101111 - DB Conf_port.CNF_PORT + DB ACEX.CNF_PORT ;!FIXIT можно убрать DW %00000001101100 DW %11001001101111 - DB Conf_port.SCALE + DB ACEX.SCALE DW %11000001101100 DW %11001001101111 - DB Conf_port.SCALE -;------------------------------ + DB ACEX.SCALE + -;ok DW %00000000001010 DW %00010001101111 - DB #E8 + DB ACEX.SLOT0 DW %00010000001010 DW %11010001101111 - DB #E8 + DB ACEX.SLOT0 DW %11010000001010 DW %11010001101111 - DB #E8 -;ok + DB ACEX.SLOT0 + DW %00000000101010 DW %00010001101111 - DB #E9 + DB ACEX.SLOT1 DW %00010000101010 DW %11010001101111 - DB #E9 + DB ACEX.SLOT1 DW %11010000101010 DW %11010001101111 - DB #E9 + DB ACEX.SLOT1 -;ok DW %00000001001010 DW %00010001101111 - DB #EA + DB ACEX.SLOT2 DW %00010001001010 DW %11010001101111 - DB #EA + DB ACEX.SLOT2 DW %11010001001010 DW %11010001101111 - DB #EA -;ok + DB ACEX.SLOT2 + DW %00000001101010 DW %00010001101111 - DB #F0 + DB ACEX.SLOT3 DW %00010001101010 DW %11010001101111 - DB #F0 + DB ACEX.SLOT3 DW %11010001101010 DW %11010001101111 - DB #F0 + DB ACEX.SLOT3 ; DCP END MARKER DW 0,0,0 ;-----------------------------------------------------------------------; diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 9c721ae..c92c9db 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -250,23 +250,6 @@ NO_RESTART: ; - -; -;----------------------------[ FOR ZX-MODE ]----------------------------; - IF BIOS_ZXMODE -;!HARDCODE на этот адрес #С0 прыгает в vROM Basic-48 по адресу #3CF0 -; можно попробовать переделать этот адрес там - _mInfoBLOCK #C0-$,0 -;BEGIN: -; Вход через USR 15600 -RET_FROM_BIOS_TO_BASIC48: - CALL CH_2 - CALL COMAND_LINE ; ВЫПОЛНЕНИЕ КОМАНДЫ, ЕСЛИ ЕСТЬ - ; Вход без команды - JP SW_ROM_1 ; ВОЗВРАТ В << MAIN MENU >> - ENDIF -;-----------------------------------------------------------------------; - ; ==== POST PROCs ================= MODULE POST_TEST START: @@ -283,9 +266,7 @@ POST_1_RAM_BUS: LD BC,0 LD HL,#C000 LD DE,#0055 - -.loop: - LD (HL),E +.loop: LD (HL),E INC L LD (HL),D DEC L @@ -651,7 +632,7 @@ start: ;----[перехват soft reset #EE port]----- Check_EE_Port: - LD A,Conf_port.RET_PORT + LD A,ACEX.RET_PORT LD B,0 LD C,BIOS.SET_PORTS CALL @ToBIOS_3D13 ; переустановить внутр. порт #EE @@ -757,7 +738,7 @@ Set_Default_Screen: CALL FN_SYNC.INT_DEF ; set default int ld a,128+4 ; !HARDCODE ;ld c,BIOS.FN_SYNC - ;RST ToBIOS_18 ; set default vsync + ;RST_to_BIOS_18 ; set default vsync CALL FN_SYNC ; set default vsync Setup_to_RAM: LD HL,Setup_Starter.Start @@ -976,20 +957,19 @@ init_zx_roms: IN A,(SLOT3) PUSH AF - ;!HARDCODE DI - LD A,1 + LD A,1 ;!HARDCODE OUT (SYS_PORT.ROM),A - LD A,2 + ;LD A,2 + INC A ;!HARDCODE - IF SetFullZXromLoader - LD B,6 ; zx-rom number of pages - ELSE - LD B,4 - ENDIF - -.loop: - push bc + IF SetFullZXromLoader + LD B,6 ; zx-rom number of pages + ELSE + LD B,4 + ENDIF +;!FIXIT переделать на функцию биоса для чтения ROM-DISK и перенести в него ПЗУ спектрума +.loop: push bc out (ROM.SLOT0),a or %01000000 @@ -1024,7 +1004,7 @@ init_zx_roms: LD B,#44 ; page CALL .SET_ROM - LD A,#E0 ;!HARDCODE ROM-ID - EXPANSION + LD A,#E0 ;!HARDCODE ROM-ID - BIOS LD B,#45 ; page CALL .SET_ROM @@ -1114,252 +1094,11 @@ SPECTRUM_TASK: BASIC_128: LD SP,#BFFF LD HL,RES128_PROG - LD DE,#5B00 ; запуск программы на BASIC-е. + LD DE,ZX_VARS.PRINTER_BUFFER ; запуск программы на BASIC-е. LD BC,LEN_RES128 LDIR DI - JP #5B00 ;!HARDCODE - -;-----------------------------------------------------------------------; - -;***************************************************** - -; TURBO_OFF: -; LD A,D_TBOFF -; OUT (SYS_PORT.ON),A -; RET - -; TURBO_ON: -; LD A,D_TBON -; OUT (SYS_PORT.ON),A -; RET - -; JP_HL: JP (HL) - - -;PRINT_LINE: -; LD A,(HL) -; INC HL -; CP 0FFh -; RET Z -; RST 10H -; JR PRINT_LINE - - -; JP RESET_128 - - - IF BIOS_ZXMODE -;-----------------------------------------------------------------------; -; ******* SERVICE ******* -;-----------------------------------------------------------------------; - -;------[ ДЕШИФРАЦИЯ КОМАНДНОЙ СТРОКИ,ПЕРЕДАННОЙ ДЛЯ "EXPANSION" ]-------; -COMAND_LINE: - LD HL,(#5C5D) ;!HARDCODE CH_ADR -COMAND_LOOP: - LD A,(HL) - INC HL - CP ":" - JR Z,COMAND_L1 - CP 0Dh - JR NZ,COMAND_LOOP - RET - -COMAND_L1: - LD A,(HL) - CP 0EAh ; REM !!! - RET NZ - INC HL -COMAND_OK: ; ОБНАРУЖЕНА КОМАНДА ДЛЯ 'expansion' - LD A,(HL) - INC HL - CP ':' - JP Z,MENU_S1 - CP 0Dh - JP Z,MENU_S1 - CP 'I' - JR Z,COMAND_ISD - CP 'i' - JR Z,COMAND_ISD - CP 'T' - JR Z,TASK_SWITCH - CP 't' - JR Z,TASK_SWITCH - DEC HL - POP BC - JP BASIC_MENU -MENU_S1: - POP BC - CALL SERVICE - JP SW_ROM_1 - -COMAND_ISD: - LD A,(HL) - INC HL - CP 'S' - JP Z,COMAND_ISD2 - CP 's' - JP Z,COMAND_ISD2 - RET - -COMAND_ISD2: - POP BC - CALL ISDOS - JP SW_ROM_1 - - -TASK_SWITCH: - -; *** Сохранить задачу *** - PUSH IY - PUSH IX - PUSH AF - PUSH BC - PUSH DE - PUSH HL - - EXX - EX AF,AF' - - PUSH AF - PUSH BC - PUSH DE - PUSH HL - - LD A,R - PUSH AF - LD A,I - PUSH AF - - LD A,(HL) - RLCA - RLCA - RLCA - RLCA - AND 30H ; новая задача 0..3 - LD C,A - - IN A,(SLOT3) - LD B,A ; 3-я страница текущей задачи - LD A,SYS_PAGE - OUT (SLOT3),A - - LD IX,SYS_PAGE.TASK_DATA ; данные задач - LD E,(IX) ; старая задача - LD D,0 - ADD IX,DE ; данные текущей задачи - LD E,16 - ADD IX,DE ; смещение данных в таблице задач - - LD (IX+1),B ; сохранить страницу 3 - LD HL,0 - ADD HL,SP - LD (IX+2),L ; сохранить стек задачи - LD (IX+3),H - SET 0,(IX) ; установить флаг сохраненности текущей задачи - RES 1,(IX) ; установить флаг, что задача покинута - - LD IX,SYS_PAGE.TASK_DATA - LD E,C - LD D,0 - ADD IX,DE ; новая задача - LD E,16 - ADD IX,DE ; смещение данных в таблице задач - - BIT 1,(IX) -; JR NZ,TASK_IN_WORK ; задача в работе ??? неверное завершение - ; сбрасывать или просто возвращаться - - BIT 0,(IX) ; была сохранена/нет - JR NZ,TASK_SET ; задача существует - -; задачи не было! - LD IX,SYS_PAGE.TASK_DATA - LD A,C ; задача - LD (IX),A ; установить новую задачу текущей - - JP SPECTRUM_TASK ; запустить новую задачу! -; и пока пофиг распределение памяти! - -TASK_SET: - LD IX,TASK_RESTORE - LD A,C - EXX - JP INIT_PAGES ; переключить все страницы! - -TASK_RESTORE: - EXX - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,C - LD IX,SYS_PAGE.TASK_DATA - LD (IX),A ; установить новую задачу текущей - - LD E,A - LD D,0 - ADD IX,DE ; новая задача - LD E,16 - ADD IX,DE - - LD L,(IX+2) ; вспомнить стек - LD H,(IX+3) - LD SP,HL - LD A,(IX+1) ; вспомнить третью страницу - OUT (SLOT3),A - - - POP AF ; восстановить - LD I,A - POP AF - LD R,A - POP HL - POP DE - POP BC - POP AF - EX AF,AF' - EXX - POP HL - POP DE - POP BC - POP AF - POP IX - POP IY - ; вернуться в задачу - -NO_TASK: - POP BC - JP SW_ROM_1 - -; 259F - ADRESS BASIC128 - MAIN_MENU -;-----------------------------------------------------------------------; - - - -;-----------------------------------------------------------------------; -; *** UTILITES *** -;-----------------------------------------------------------------------; - -; C_0030: ; получить раб обл -; CALL_48X 0030h -; RET -C_19E8: ; очистить раб обл - CALL_48X 19E8h - RET -C_1655: ; получить пространство - CALL_48X 1655h - RET -CLS: -C_0D6B: CALL_48 #0D6B - RET -CH_2: LD A,2 -C_1601: ; OPEN CHANEL - CALL_48 #1601 - RET - - INCLUDE 'ZX_MENU.ASM' - INCLUDE 'ZX_MODE.ASM' - ENDIF + JP ZX_VARS.PRINTER_BUFFER ;-----------------------------------------------------------------------; ; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; ; @@ -1370,11 +1109,9 @@ C_1601: ; OPEN CHANEL ; ;>$< >$< >$< >$< >$< >$< [ ПЕРЕМЕЩАЕМЫЕ В ОЗУ ] >$< >$< >$< >$< >$< >$< ; - ;--------[ Программа, размещаемая с #5B00 для запуска Spectrum ]--------; -;!TODO нужна ли тут? RES128_PROG: - DISP #5B00 ;!HARDCODE SWAP_ROM + DISP ZX_VARS.PRINTER_BUFFER ;#5B00 LD A,ROM.BIOS OUT (SYS_PORT.RAM),A ; Возврат в 128k ROM LD C,SLOT3 @@ -1414,7 +1151,7 @@ RES128_PROG: LD B,#1F OUT (C),A DEC D - JP Z,0 ; 3 ВХОД В EXPANSION ??? + JP Z,0 ; 3 ВХОД В EXPANSION ??? ; XOR A @@ -1453,7 +1190,7 @@ RESTARTS_PROG: ; !TODO LDConf Start: DISP COMPILE_ADDR.SETUP_STARTER Exec: - LD A,CNF_PORT.CNF_0 + ROM.EXPANSION + LD A,CNF_PORT.CNF_0 + ROM.EXTENSION OUT (SYS_PORT.ROM),A LD HL,ROM_MAP.SETUP @@ -1556,8 +1293,12 @@ PROG_NO_ROM.size EQU $-PROG_NO_ROM ;-------------------[] ;-----------------------------------------------------------------------; ;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; +; + +; +; !FIXIT сделать эти фиксированные адреса отдельным файлом и с IF/ELSE и подключать их потом куда надо. ; ;????? посмотреть ;----------------------------------------------------------------------; @@ -1642,7 +1383,7 @@ DOS_ON: NOP ;*************************************** _mInfoBLOCK #3D13-$,#FF NOP - JP #18 + JP ToBIOS_18 ;*************************************** ;*************************************** @@ -1653,7 +1394,6 @@ DOS_ON: NOP ;*************************************** _mInfoBLOCK #3E00-$,#FF -;!TODO а чё не в стек прыгать? DOS_OFF: DI PUSH AF @@ -1811,7 +1551,7 @@ ROM_DISK.Pages: ; ; Для вызова функций биоса из страницы 0 ПЗУ (ROM Extension) FN1_RET: PUSH AF - LD A,ROM.EXPANSION + LD A,ROM.EXTENSION OUT (SYS_PORT.ROM),A POP AF RST #18 @@ -1839,7 +1579,7 @@ FN1_RET: _mInfoBLOCK #3FE8-$,#FF EXP_HDD: ;HDD_EXE: PUSH AF - LD A,ROM.EXPANSION + LD A,ROM.EXTENSION OUT (SYS_PORT.ROM),A POP AF RET diff --git a/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm b/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm index ac3a106..e3b0139 100644 --- a/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm +++ b/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm @@ -449,7 +449,7 @@ WRS000: PUSH BC LD D,#1D ;!!!!! CMOS глянуть ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD POP BC AND 1 diff --git a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm index c61d1e7..43c93bb 100644 --- a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm +++ b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm @@ -115,7 +115,7 @@ RAM_DRV_READ_WRITE: AND #0F ;номер рамдиска ;LD C,BIOS.GET_RAMD_ST - ;RST ToBIOS_18 + ;RST_to_BIOS CALL GET_RAMD_ST ; A = Memory Block ID @@ -136,7 +136,7 @@ RAM_DRV_READ_WRITE: PUSH DE //PUSH BC ;LD C,BIOS.BLK_RD_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL BLK_RD_WR JR C,.error_stack3 ; hl = address + Sector_low * 256 * Sector_counter diff --git a/src/bios/exp/FUNC_SERVICE.asm b/src/bios/exp/FUNC_SERVICE.asm index b7e8dbd..4ed67f3 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/src/bios/exp/FUNC_SERVICE.asm @@ -122,7 +122,7 @@ RST_CONF: ;!TODO сделать функцию по заливке своей конфы, перехвату ресета. ; .. ... ... .. LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT - JP ToBIOS_18 + JP_to_BIOS ;*************************************** @@ -190,7 +190,7 @@ REINIT: DEC B DI LD A,DCP_PAGE OUT (SLOT1),A ; set DCP page - LD A,Conf_port.RESET + LD A,ACEX.RESET LD (#4400),A ; open for WR .loop: LD BC,#0100 ; цикл сброса OUT (C),C diff --git a/src/bios/exp/ZX_MENU.ASM b/src/bios/exp/ZX_MENU.ASM index a8930e0..6caae58 100644 --- a/src/bios/exp/ZX_MENU.ASM +++ b/src/bios/exp/ZX_MENU.ASM @@ -101,7 +101,7 @@ RUN_M_1: POP AF ; вернуть номер выбора POP IX RET ; возврат из программы RUN_MENU - +JP_HL: JP (HL) ;************************************** ; 128k MENU ;************************************** @@ -132,7 +132,7 @@ MN_128_S: ;************************************** MENU_128: LD A,0 - OUT (SYS_PORT_OFF),A + OUT (SYS_PORT.OFF),A CALL SWAP_ROM CALL NEW_SP @@ -220,9 +220,9 @@ BASIC_MENU: ; CP 'S' ; JP Z,SET_SYSTEM - LD DE,(CH_ADR) + LD DE,(ZX_VARS.CH_ADR) PUSH DE - LD (CH_ADR),HL + LD (ZX_VARS.CH_ADR),HL CALL_48X 1C8Ch ; SYMBOL VAR CALL_48X 2BF1h ; input txt !!! ; DE - adr @@ -239,7 +239,7 @@ NO_EXE_M: POP DE LD (DE),A POP HL - LD (CH_ADR),HL + LD (ZX_VARS.CH_ADR),HL JP SW_ROM TST_M: PUSH DE @@ -276,9 +276,9 @@ ERR_TST_M: ;************************************** CALL_DOS_MOVE: - LD DE,5C00H-.Size + LD DE,#5C00 - DOS_PROG.Size ;!HARDCODE LD HL,DOS_PROG - LD BC,.Size + LD BC,DOS_PROG.Size LDIR RET ; @@ -294,7 +294,7 @@ CALL_DOS1: LD (ZX_VARS.STK_BOT),DE LD (ZX_VARS.STK_END),DE CALL CALL_DOS_MOVE - JP 5C00H-.Size + JP #5C00 - DOS_PROG.Size CALL_DOS: PUSH HL PUSH DE @@ -302,17 +302,17 @@ CALL_DOS: PUSH AF CALL CALL_DOS_MOVE LD A,13H - LD (5C00H-.Size+DOS_PROG_A),A + LD (5C00H-DOS_PROG.Size+DOS_PROG_A),A POP AF POP BC POP DE POP HL - JP 5C00H-.Size + JP #5C00-DOS_PROG.Size DOS_PROG: PUSH AF XOR A - OUT (SYS_PORT_OFF),A + OUT (SYS_PORT.OFF),A POP AF CALL #3D03 ;!HARDCODE DOS_PROG_A EQU $-DOS_PROG-1 @@ -321,7 +321,7 @@ DOS_PROG_A EQU $-DOS_PROG-1 OUT (CNF_PORT),A POP AF RET -.Size EQU $-DOS_PROG +DOS_PROG.Size EQU $-DOS_PROG CONT_PROG: LD HL,1AFDH diff --git a/src/bios/exp/ZX_MODE.ASM b/src/bios/exp/ZX_MODE.ASM index 1c3123b..6114789 100644 --- a/src/bios/exp/ZX_MODE.ASM +++ b/src/bios/exp/ZX_MODE.ASM @@ -53,23 +53,23 @@ GOTO_TRDOS: TURBO_OFF: LD A,BIOS.FN_TURBO.OFF LD C,BIOS.FN_TURBO - JP ToBIOS_18 + JP_to_BIOS TURBO_ON: LD A,BIOS.FN_TURBO.ON LD C,BIOS.FN_TURBO - JP ToBIOS_18 + JP_to_BIOS ;******************************* CLEAR_RAM: DI LD C,BIOS.FullInit - RST ToBIOS_18 + RST_to_BIOS ; при очистке памяти из меню спектрума возврат в DSS по CAD ; будет опасным (RAM Blocks освободились), ; поэтому отключаем перехват ресета. ;!TODO придумать как отключать перехват только на возврат в DSS - LD A,Conf_port.RET_PORT + LD A,ACEX.RET_PORT LD BC,BIOS.SET_PORTS CALL ToBIOS_3D13 EI @@ -160,7 +160,7 @@ IS_MENU: SPRINTER_1X: CALL _SET_CNF LD C,BIOS.RST_CONF.SP97_1 - RST ToBIOS_18 + RST_to_BIOS CALL CNF_PN_320 LD L,2 ;FN_SYNC.INT_PENT JR 1F ;!FIXIT метку придумать @@ -169,7 +169,7 @@ SPRINTER_1X: AY8910_X: CALL _SET_CNF LD C,BIOS.RST_CONF.AY8910 - RST ToBIOS_18 + RST_to_BIOS LD A,#FA ; no ACC, Original waits LD (Port_All_Mode),A @@ -227,17 +227,17 @@ CONFIG_SET: LD A,L LD C,BIOS.FN_SYNC - RST ToBIOS_18 + RST_to_BIOS LD HL,#4104 ;!HARDCODE LD E,0 LD BC,256*4 + BIOS.LP_OPEN_S ;!HARDCODE - RST ToBIOS_18 + RST_to_BIOS LD HL,#5104 ;!HARDCODE LD E,0 LD BC,256*4 + BIOS.LP_OPEN_S - RST ToBIOS_18 + RST_to_BIOS POP DE LD A,E @@ -250,7 +250,7 @@ CONFIG_SET: SPRINTER_reset: CALL _SET_CNF LD BC,256*BIOS.REINIT.SOFT_RESET + BIOS.REINIT - JP ToBIOS_18 + JP_to_BIOS _SET_CNF: DI @@ -292,7 +292,7 @@ UTILIT: UTIL_DISK: LD A,0 - CALL EMM_FN3 + CALL EMM_FN3 ;!!!!! через RST_to_BIOS EMM.FreeMemRMD LD HL,C_DEMO6 CALL CALL_DOS1 diff --git a/src/bios/old_files/DCP_PAGE.bin b/src/bios/old_files/DCP_PAGE.bin deleted file mode 100644 index 8f766b8b7891db9985299da6aa8ae96b6621a643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHOTUOgJ5S=CTMW3`MeYen-b67#vz!yt$|6oT+Uu>oHizReMBWbJ~L!{WT;Y9x6 z>{=WZ(g8L<>{ z{f9(Xbg}sHD8Zzd%d+^teUaAgdG39VzA`_3`1t8FMLxv7zVa`D-(#+m#ZNEfX~s{l zgx_5){uB#}_IrCHJ}R0|`@7-zKRzHj z_Rn+pkg<>d2I4;L%rD^r%~?fCqI>VN0_3;7=AgVKiMP4h3v|EVzl@8mDY{|WN{fcd#u>z{6ZSDKao z2YX|Gl_t0zdz; z=4$?L*z*6?R;?1`L)@y`_0#w?-$&flCMiQc#7X5z?VaxwlTeV7%4{@t%*H7a^ z{#O1E4MSYGV&p>%Z4ny(VlMX#xAI?Tv>pB=|L5_jSf~>|#Aq*Kcz1+oFJh@b4S!+& z9}HvrHUH%T)O*CzhU?!B{fGVcpvU}*RsYldzob9f{`UUd(Ep%6HtrKX^v8|-CF?)W z7sulu{L&+K-Z68~ut4NP%vE~W?+7I|H~fK zd|La**8i>K-}&eNA>WVlZ|V8}Q*{@&SN(g|Gyg8l|DOXte~&QJqRja}{r-W*&i{u# ze`nkAydSZ2kNF$cAEoF2z5NgTHt*%>e{cT-|JeFJb^bjy|E}x*)cN<+{JXCITgkr* z^uI5E@A)6}ch~fPEBSYc|3Uvs^|!bGd-C6P{YU+qI{%)Uf7kN=+ope0=igKF7v}%< z`#(*#WBy;i|1UiM>8XF({gThy`9sP6|Iqsn>%YHqZyfg@hF<@y=RcJfxR&4Y|E&Fo z8vi-~3_SjY pzv{nq@pbc0)&JJ`3-KPtW58Uc#{VvS|5Mlh?mLSx{)yNB{{hDGr+fea diff --git a/src/bios/old_files/EXP_DCP.LZ b/src/bios/old_files/EXP_DCP.LZ deleted file mode 100644 index d0f93ea1108566181902d84eff41ef893e0dccc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5108 zcmeHK&2G~`5VlK_Hn;rLX(4UpQinj3Ho_7}Ac67>IdLp+LT~2QybnlOL*3Wl*zIW_ z00c9$PByl8?Ifh7LUp&hqn-U`Iy-+`yLR^d+Qz9G)%*OoMN4nzw|n^X$m@J=oL%0; z^f#odQF9=!CgC;^J#iIo6IKa0?UR7P$yfJT_xTHiC`y7Efk6ro3AD%C0QUI7xr;bC zPxVObI0M-)f?T8^E(e6me@O#T(Hsd{I%49$awwd{9~Z-vF^VD(Lr_OB4a(ztDT_e3 zNyYr(kC!(eK1J;Y(Q6S*hOqh~7@DA8C^P{%BP5U^5CkwS5-i;FKe+&-Db|srY94@| zR0z;98YZIaA@eB0A2KhQdD9HaX6}EJcbKRPCK05b${|yNFOzjet)MGpqdOA%9->-+ zq9BgDLbf(k|JDbZ>rsOm>!`Y4)ITn0d5f1#o$E{!z!qNyr z+(@w)vRVPl^58tN#%2~a6bnX5CiRR4whRrE`T{7_aREbrsF~MF*ZNzEx;TnVv6^z! zy^gu%qsZ`DOBpTYE*o(&s&uh+YgY9~W`eS2idLtkGjkwwO-q(9J;FQpL(LZO3lHuSVvoobt#iG1E_l zg(XH)(FuHJ&AyG$s>ml)Vr%+zQkz3-Bd!sv>{al8;OrgI?c%fw@BVmYb|Xl@jl!7! Kv^#fn>wf^Iw9R1v diff --git a/src/bios/old_files/EXP_DCP2.asm b/src/bios/old_files/EXP_DCP2.asm deleted file mode 100644 index 9c7bd28..0000000 --- a/src/bios/old_files/EXP_DCP2.asm +++ /dev/null @@ -1,460 +0,0 @@ -; - IFN SET_NEWdcp -;-----------------------------------------------------------------------; -; !TODO сравнить как запакуется DCP алгоритмом для k50 -DCP_INIT: - EXX - LD HL,DCP_DATA - LD DE,#C000 -.loop0: - LD B,8 - LD C,(HL) - INC HL -.loop1: - RLC C - JR C,.loop2 - SUB A - LD (DE),A - INC DE - DJNZ .loop1 - JR .loop3 -.loop2: - LD A,(HL) - INC HL - LD (DE),A - INC DE - DJNZ .loop1 -.loop3: - inc d - dec d - JR NZ,.loop0 - - LD HL,#C000 ; CONFIG-3 for DOS & other fns - LD DE,#F000 - LD BC,#0400 - LDIR - LD HL,#F000 - LD DE,#F400 - LD BC,#0C00 - LDIR - -; First IN command - OPEN DCP - IN A,(SLOT3) - EXX - JP (HL) -;-----------------------------------------------------------------------; - - ELSE - -;-----------------------------------------------------------------------; -DCP_INIT: - LD C,XL - LD B,XH - LD E,YL - LD D,YH - EXX - - LD HL,#C000 - LD DE,#C001 - LD BC,#3FFF - LD (HL),L - LDIR - - LD IY,.data - LD IX,.ret - -.loop: - LD L,(IY) - LD H,(IY+1) - LD E,(IY+2) - LD D,(IY+3) - LD B,(IY+4) - JR DCP_FN0M - -.ret: - LD BC,5 - ADD IY,BC - LD A,(IY+2) - OR (IY+3) - JR NZ,.loop - - EXX - LD XL,C - LD XH,B - LD YL,E - LD YH,D - -; First IN command - OPEN DCP - IN A,(SLOT3) - JP (HL) -;-----------------------------------------------------------------------; - ENDIF - - -;-----------------------------------------------------------------------; -; Функция дешифратора портов. -; HL - адрес -; DE - маска - 0 изменяемые биты, 1 неизменяемые -; B - порт - -DCP_FN0M: - LD A,L - AND E - LD L,A - - LD A,H - AND D -; AND #3F - OR #C0 - LD H,A - - LD A,D - OR #C0 - LD D,A - -.loop: LD (HL),B - - LD A,L ; замаскировать неизменяемые биты 1-ми - OR E ; для прохождения переноса - INC A ; увеличить адрес - JR Z,.carry ; возник перенос - - OR E - XOR E ; обнулить неизменяемые биты - LD C,A ; изменяемая часть - - LD A,L - AND E ; выделить неизменяемую - OR C - LD L,A ; добавить изменяемую часть - - JR .loop ; цикл - -.carry: ; A = 0 -; OR E -; XOR E -; LD C,A - LD A,L ; забить изменяемые биты нулями - AND E -; OR C - LD L,A - - LD A,H ; замаскировать неизменяемые биты 1-ми - OR D ; для прохождения переноса - INC A ; увеличить адрес - JR Z,.exit - - OR D - XOR D - LD C,A ; изменяемая часть - - LD A,H - AND D ; выделить неизменяемую - OR C - LD H,A ; добавить изменяемую часть - JR .loop - -.exit: JP (IX) -; - - IF SET_NEWdcp -;-----------------------------------------------------------------------; -; DATA FOR DCP -; вбиваем в таблицу DCP.XLSX нужный внешний порт, -; смотрим смещение для OUT (С),x - это адрес -; -; C C E D / A A A A A A A A A -; N N 1 O W 1 1 6 5 1 7 2 1 0 -; F F 2 S R 5 4 3 -; 1 0 8 -; -; CCED/AAAAAAAAA -; NN1OW116517210 -; FF2SR54 3 -DCP_INIT.data: ; 108 -; Border ....0..11.1110 - DW %00000001101110 ; - адрес - DW %00001001101111 ; - маска - 0 изменяемые биты, 1 неизменяемые - DB #C2 ; - порт -; Keyboard ....1..11.1110 - DW %00001001101110 - DW %00001001101111 - DB #40 -; Kempston ...11..00.0111 - DW %00011000000111 - DW %00011001101111 - DB #15 - -; DRQ/INTRQ ...01..11.1111 - DW %00001001101111 - DW %00011001101111 - DB #15 -; WR_PDOS ...00..11.1111 - DW %00000001101111 - DW %00011001101111 - DB #14 -; CS_WG93_1F ...0...00.0111 - DW %00000000000111 - DW %00010001101111 - DB #10 -; CS_WG93_3F ...0...01.0111 - DW %00000000100111 - DW %00010001101111 - DB #11 -; CS_WG93_5F ...0...10.0111 - DW %00000001000111 - DW %00010001101111 - DB #12 -; CS_WG93_7F ...0...11.0111 - DW %00000001100111 - DW %00010001101111 - DB #13 -; -; CNF_PORT ........1.0100 - DW %00000000100100 - DW %00000000101111 - DB #C6 -; -; SOUND_BFFD_WR ....0101111101 - DW %00000101111101 - DW %00001111111111 - DB #91 -; SOUND_FFFD_WR ....0111111101 - DW %00000111111101 - DW %00001111111111 - DB #90 -; SOUND_FFFD_RD ....11.1111101 - DW %00001101111101 - DW %00001101111111 - DB #00 -; -; COVOX_4F ...10.....0111 - DW %00010000000111 - DW %00011000001111 - DB #88 -; COVOX_FB ...10..11.1011 - DW %00010001101011 - DW %00011001101111 - DB #88 -; CASH__FB ...11..11..011 - DW %00011001100011 - DW %00011001100111 - DB #88 -; CASH__80 ...11..00.1000 - DW %00011000001000 - DW %00011001101111 - DB #88 -; -; P_XTR ...1...01.1.11 - DW %00010000101011 - DW %00010001101011 - DB #32 -; -; SC_256_1FFDH 0....001101101 - DW %00000001101101 - DW %10000111111111 - DB #C0 -; ZX_128_7FFDH 0.0..0111.1101 - DW %00000011101101 - DW %10100111101111 - DB #C1 -; ZX_128_7FFDH 0..0.0111.1101 - DW %00000011101101 - DW %10010111101111 - DB #C1 - -; ZX_128_7FFDH 100..0.11.1101 - DW %10000001101101 - DW %11100101101111 - DB #C1 -; ZX_128_7FFDH 10.0.0.11.1101 - DW %10000001101101 - DW %11010101101111 - DB #C1 - -; SC_256_1FFDH 11...001101101 - DW %11000001101101 - DW %11000111111111 - DB #C0 -; ZX_128_7FFDH 110..0111.1101 - DW %11000011101101 - DW %11100111101111 - DB #C1 -; ZX_128_7FFDH 11.0.0111.1101 - DW %11000011101101 - DW %11010111101111 - DB #C1 -; -; HDD_DATA ...0...10.0000 - DW %00000001000000 - DW %00010001101111 - DB #20 -; HDD_1F1 ...0.0010.0001 - DW %00000001000001 - DW %00010111101111 - DB #21 -; HDD_1F2 ...0.0010.0010 - DW %00000001000010 - DW %00010111101111 - DB #22 -; HDD_1F3 ...0.0010.0011 - DW %00000001000011 - DW %00010111101111 - DB #23 -; HDD_1F4 ...0.0010.0100 - DW %00000001000100 - DW %00010111101111 - DB #24 -; HDD_1F5 ...0.0010.0101 - DW %00000001000101 - DW %00010111101111 - DB #25 -; HDD_1F6 ...0.0110.0010 - DW %00000011000010 - DW %00010111101111 - DB #26 -; HDD_1F7 ...0.0110.0011 - DW %00000011000011 - DW %00010111101111 - DB #27 -; HDD_3F6 ...0.0110.0100 - DW %00000011000100 - DW %00010111101111 - DB #28 -; HDD_3F7 ...0.0110.0101 - DW %00000011000101 - DW %00010111101111 - DB #29 -; -; HDD_DATA 00.....10.0000 - DW %00000001000000 - DW %11000001101111 - DB #20 -; HDD_1F1 00...0010.0001 - DW %00000001000001 - DW %11000111101111 - DB #21 -; HDD_1F2 00...0010.0010 - DW %00000001000010 - DW %11000111101111 - DB #22 -; HDD_1F3 00...0010.0011 - DW %00000001000011 - DW %11000111101111 - DB #23 -; HDD_1F4 00...0010.0100 - DW %00000001000100 - DW %11000111101111 - DB #24 -; HDD_1F5 00...0010.0101 - DW %00000001000101 - DW %11000111101111 - DB #25 -; HDD_1F6 00...0110.0010 - DW %00000011000010 - DW %11000111101111 - DB #26 -; HDD_1F7 00...0110.0011 - DW %00000011000011 - DW %11000111101111 - DB #27 -; HDD_3F6 00...0110.0100 - DW %00000011000100 - DW %11000111101111 - DB #28 -; HDD_3F7 00...0110.0101 - DW %00000011000101 - DW %11000111101111 - DB #29 -; -; PAGE0 ...0...00.1010 - DW %00000000001010 - DW %00010001101111 - DB #E8 -; PAGE1 ...0...01.1010 - DW %00000000101010 - DW %00010001101111 - DB #E9 -; PAGE2 ...0...10.1010 - DW %00000001001010 - DW %00010001101111 - DB #EA -; PAGE3 ...0...11.1010 - DW %00000001101010 - DW %00010001101111 - DB #F0 -; -; PAGE0 00.....00.1010 - DW %00000000001010 - DW %11000001101111 - DB #E8 -; PAGE1 00.....01.1010 - DW %00000000101010 - DW %11000001101111 - DB #E9 -; PAGE2 00.....10.1010 - DW %00000001001010 - DW %11000001101111 - DB #EA -; PAGE3 00.....11.1010 - DW %00000001101010 - DW %11000001101111 - DB #F0 -; -; Y_PORT(RGADR) ...0...00.1001 - DW %00000000001001 - DW %00010001101111 - DB #C4 -; RGMOD ...0...10.1001 - DW %00000001001001 - DW %00010001101111 - DB #C5 -; -; Y_PORT(RGADR) 00.....00.1001 - DW %00000000001001 - DW %11000001101111 - DB #C4 -; RGMOD 00.....10.1001 - DW %00000001001001 - DW %11000001101111 - DB #C5 -; -; ISA_REG ...00100101101 - DW %00000100101101 - DW %00011111111111 - DB #1B -; CMOS_DWR ...001.0111101 - DW %00000100111101 - DW %00011101111111 - DB #1E -; CMOS_AWR ...00110101101 - DW %00000110101101 - DW %00011111111111 - DB #1D -; CMOS_DRD ...011.0111101 - DW %00001100111101 - DW %00011101111111 - DB #1C -; -; ISA_REG 00..0100101101 - DW %00000100101101 - DW %11001111111111 - DB #1B -; CMOS_DWR 00..01.0111101 - DW %00000100111101 - DW %11001101111111 - DB #1E -; CMOS_AWR 00..0110101101 - DW %00000110101101 - DW %11001111111111 - DB #1D -; CMOS_DRD 00..11.0111101 - DW %00001100111101 - DW %11001101111111 - DB #1C - -; DCP END MARKER - DW 0,0,0 -;-----------------------------------------------------------------------; - ENDIF -; \ No newline at end of file diff --git a/src/bios/old_files/EXP_DCP_GENERATOR.ASM b/src/bios/old_files/EXP_DCP_GENERATOR.ASM deleted file mode 100644 index 082adbb..0000000 --- a/src/bios/old_files/EXP_DCP_GENERATOR.ASM +++ /dev/null @@ -1,9 +0,0 @@ - - DEFINE FNAME_DCPpage './src/bios/old_files/DCP_PAGE.bin' - DEFINE FNAME_DCP './src/bios/old_files/EXP_DCP_TABLE_GENERATED.ASM' - - includelua 'Shared_includes/lua/Functions.lua' - - LUA PASS1 - Generate_DCPASM_fromPAGE(sj.get_define("FNAME_DCPpage"), sj.get_define("FNAME_DCP")) - ENDLUA diff --git a/src/bios/old_files/EXP_DCP_TABLE_GENERATED.ASM b/src/bios/old_files/EXP_DCP_TABLE_GENERATED.ASM deleted file mode 100644 index 1a1b144..0000000 --- a/src/bios/old_files/EXP_DCP_TABLE_GENERATED.ASM +++ /dev/null @@ -1,639 +0,0 @@ -; -;-----------------------------------------------------------------------; - -; - DW %00000000000111 - DW %11010001101111 - DB #10 -; - DW %01000000000111 - DW %11010001101111 - DB #10 -; - DW %10000000000111 - DW %11010001101111 - DB #10 -; - DW %11000000000111 - DW %11000001101111 - DB #10 -; - DW %00000000100111 - DW %11010001101111 - DB #11 -; - DW %01000000100111 - DW %11010001101111 - DB #11 -; - DW %10000000100111 - DW %11010001101111 - DB #11 -; - DW %11000000100111 - DW %11000001101111 - DB #11 -; - DW %00000001000111 - DW %11010001101111 - DB #12 -; - DW %01000001000111 - DW %11010001101111 - DB #12 -; - DW %10000001000111 - DW %11010001101111 - DB #12 -; - DW %11000001000111 - DW %11000001101111 - DB #12 -; - DW %00000001100111 - DW %11010001101111 - DB #13 -; - DW %01000001100111 - DW %11010001101111 - DB #13 -; - DW %10000001100111 - DW %11010001101111 - DB #13 -; - DW %11000001100111 - DW %11000001101111 - DB #13 -; - DW %00000001101111 - DW %11011001101111 - DB #14 -; - DW %01000001101111 - DW %11011001101111 - DB #14 -; - DW %10000001101111 - DW %11011001101111 - DB #14 -; - DW %11000001101111 - DW %11001001101111 - DB #14 -; - DW %00001000000111 - DW %11001000000111 - DB #15 -; - DW %01001000000111 - DW %11001000000111 - DB #15 -; - DW %10001000000111 - DW %11001000000111 - DB #15 -; - DW %11001001101111 - DW %11001001101111 - DB #15 -; - DW %00000000101101 - DW %11011111111111 - DB #16 -; - DW %11000000101101 - DW %11001111111111 - DB #16 -; - DW %00000000111101 - DW %11011111111111 - DB #17 -; - DW %11000000111101 - DW %11001111111111 - DB #17 -; - DW %10000100101101 - DW %11010111111111 - DB #18 -; - DW %10000100111101 - DW %11010111111111 - DB #19 -; - DW %10000110101101 - DW %11010111111111 - DB #1A -; - DW %00000100101101 - DW %11001111111111 - DB #1B -; - DW %10000110111101 - DW %11010111111111 - DB #1B -; - DW %11000100101101 - DW %11001111111111 - DB #1B -; - DW %00001100111101 - DW %11001101111111 - DB #1C -; - DW %11001100111101 - DW %11001101111111 - DB #1C -; - DW %00000110101101 - DW %11001111111111 - DB #1D -; - DW %11000110101101 - DW %11001111111111 - DB #1D -; - DW %00000100111101 - DW %11001101111111 - DB #1E -; - DW %11000100111101 - DW %11001101111111 - DB #1E -; - DW %00000001000000 - DW %11000001101111 - DB #20 -; - DW %01000001000000 - DW %11010001101111 - DB #20 -; - DW %10000001000000 - DW %11010001101111 - DB #20 -; - DW %11000001000000 - DW %11000001101111 - DB #20 -; - DW %00000001000001 - DW %11000111101111 - DB #21 -; - DW %01000001000001 - DW %11010111101111 - DB #21 -; - DW %10000001000001 - DW %11010111101111 - DB #21 -; - DW %11000001000001 - DW %11000111101111 - DB #21 -; - DW %00000001000010 - DW %11000111101111 - DB #22 -; - DW %01000001000010 - DW %11010111101111 - DB #22 -; - DW %10000001000010 - DW %11010111101111 - DB #22 -; - DW %11000001000010 - DW %11000111101111 - DB #22 -; - DW %00000001000011 - DW %11000111101111 - DB #23 -; - DW %01000001000011 - DW %11010111101111 - DB #23 -; - DW %10000001000011 - DW %11010111101111 - DB #23 -; - DW %11000001000011 - DW %11000111101111 - DB #23 -; - DW %00000001000100 - DW %11000111101111 - DB #24 -; - DW %01000001000100 - DW %11010111101111 - DB #24 -; - DW %10000001000100 - DW %11010111101111 - DB #24 -; - DW %11000001000100 - DW %11000111101111 - DB #24 -; - DW %00000001000101 - DW %11000111101111 - DB #25 -; - DW %01000001000101 - DW %11010111101111 - DB #25 -; - DW %10000001000101 - DW %11010111101111 - DB #25 -; - DW %11000001000101 - DW %11000111101111 - DB #25 -; - DW %00000011000010 - DW %11000111101111 - DB #26 -; - DW %01000011000010 - DW %11010111101111 - DB #26 -; - DW %10000011000010 - DW %11010111101111 - DB #26 -; - DW %11000011000010 - DW %11000111101111 - DB #26 -; - DW %00000011000011 - DW %11000111101111 - DB #27 -; - DW %01000011000011 - DW %11010111101111 - DB #27 -; - DW %10000011000011 - DW %11010111101111 - DB #27 -; - DW %11000011000011 - DW %11000111101111 - DB #27 -; - DW %00000011000100 - DW %11000111101111 - DB #28 -; - DW %01000011000100 - DW %11010111101111 - DB #28 -; - DW %10000011000100 - DW %11010111101111 - DB #28 -; - DW %11000011000100 - DW %11000111101111 - DB #28 -; - DW %00000011000101 - DW %11000111101111 - DB #29 -; - DW %01000011000101 - DW %11010111101111 - DB #29 -; - DW %10000011000101 - DW %11010111101111 - DB #29 -; - DW %11000011000101 - DW %11000111101111 - DB #29 -; - DW %00000000101100 - DW %11001111111111 - DB #2A -; - DW %11000000101100 - DW %11001111111111 - DB #2A -; - DW %00000000111100 - DW %11001111111111 - DB #2B -; - DW %11000000111100 - DW %11001111111111 - DB #2B -; - DW %00000010101101 - DW %11001111111111 - DB #2C -; - DW %11000010101101 - DW %11001111111111 - DB #2C -; - DW %00000010111101 - DW %11001111111111 - DB #2D -; - DW %11000010111101 - DW %11001111111111 - DB #2D -; - DW %00000010101100 - DW %11001111111111 - DB #2E -; - DW %11000010101100 - DW %11001111111111 - DB #2E -; - DW %00000010111100 - DW %11001111111111 - DB #2F -; - DW %11000010111100 - DW %11001111111111 - DB #2F -; - DW %00010000101011 - DW %11010001101011 - DB #32 -; - DW %00011001101110 - DW %11011001101111 - DB #40 -; - DW %01011001101110 - DW %11011001101111 - DB #40 -; - DW %10011001101110 - DW %11011001101111 - DB #40 -; - DW %00001111111101 - DW %11001111111111 - DB #52 -; - DW %01001111111101 - DW %11001111111111 - DB #52 -; - DW %10001111111101 - DW %11001111111111 - DB #52 -; - DW %11001111111101 - DW %11001111111111 - DB #52 -; - DW %00001111011111 - DW %11001111111111 - DB #58 -; - DW %11001111011111 - DW %11001111111111 - DB #58 -; - DW %00010000000000 - DW %11010000000000 - DB #88 -; - DW %01010001100011 - DW %11010001100111 - DB #88 -; - DW %10010001100011 - DW %11010001100111 - DB #88 -; - DW %00000001000110 - DW %11001111111111 - DB #89 -; - DW %11000001000110 - DW %11001111111111 - DB #89 -; - DW %00000111111101 - DW %11001111111111 - DB #90 -; - DW %01000111111101 - DW %11001111111111 - DB #90 -; - DW %10000111111101 - DW %11001111111111 - DB #90 -; - DW %11000111111101 - DW %11001111111111 - DB #90 -; - DW %00000101111101 - DW %11001111111111 - DB #91 -; - DW %01000101111101 - DW %11001111111111 - DB #91 -; - DW %10000101111101 - DW %11001111111111 - DB #91 -; - DW %11000101111101 - DW %11001111111111 - DB #91 -; - DW %00000001101101 - DW %11000111111111 - DB #C0 -; - DW %01000001101101 - DW %11000111111111 - DB #C0 -; - DW %11000001101101 - DW %11000111111111 - DB #C0 -; - DW %00000011101101 - DW %11000111101111 - DB #C1 -; - DW %01000011101101 - DW %11100111101111 - DB #C1 -; - DW %10000001101101 - DW %11100101101111 - DB #C1 -; - DW %11000011101101 - DW %11000111101111 - DB #C1 -; - DW %00000001101110 - DW %11001001101111 - DB #C2 -; - DW %01000001101110 - DW %11001001101111 - DB #C2 -; - DW %10000001101110 - DW %11001001101111 - DB #C2 -; - DW %11000001101110 - DW %11001001101111 - DB #C2 -; - DW %00000001010110 - DW %11001111111111 - DB #C3 -; - DW %11000001010110 - DW %11001111111111 - DB #C3 -; - DW %00000000001001 - DW %11000001101111 - DB #C4 -; - DW %01000000001001 - DW %11010001101111 - DB #C4 -; - DW %10000000001001 - DW %11010001101111 - DB #C4 -; - DW %11000000001001 - DW %11000001101111 - DB #C4 -; - DW %00000001001001 - DW %11000001101111 - DB #C5 -; - DW %01000001001001 - DW %11010001101111 - DB #C5 -; - DW %10000001001001 - DW %11010001101111 - DB #C5 -; - DW %11000001001001 - DW %11000001101111 - DB #C5 -; - DW %00000000100100 - DW %11000000101111 - DB #C6 -; - DW %01000000100100 - DW %11000000101111 - DB #C6 -; - DW %10000000100100 - DW %11000000101111 - DB #C6 -; - DW %11000000100100 - DW %11000000101111 - DB #C6 -; - DW %00000001101100 - DW %11001001101111 - DB #C7 -; - DW %11000001101100 - DW %11001001101111 - DB #C7 -; - DW %00000000001010 - DW %11000001101111 - DB #E8 -; - DW %01000000001010 - DW %11010001101111 - DB #E8 -; - DW %10000000001010 - DW %11010001101111 - DB #E8 -; - DW %11000000001010 - DW %11000001101111 - DB #E8 -; - DW %00000000101010 - DW %11000001101111 - DB #E9 -; - DW %01000000101010 - DW %11010001101111 - DB #E9 -; - DW %10000000101010 - DW %11010001101111 - DB #E9 -; - DW %11000000101010 - DW %11000001101111 - DB #E9 -; - DW %00000001001010 - DW %11000001101111 - DB #EA -; - DW %01000001001010 - DW %11010001101111 - DB #EA -; - DW %10000001001010 - DW %11010001101111 - DB #EA -; - DW %11000001001010 - DW %11000001101111 - DB #EA -; - DW %00000001101010 - DW %11000001101111 - DB #F0 -; - DW %01000001101010 - DW %11010001101111 - DB #F0 -; - DW %10000001101010 - DW %11010001101111 - DB #F0 -; - DW %11000001101010 - DW %11000001101111 - DB #F0 -; DCP END MARKER - DW 0,0,0 -;-----------------------------------------------------------------------; -; \ No newline at end of file diff --git a/src/bios/old_files/EXP_DCP_UNPACKER.asm b/src/bios/old_files/EXP_DCP_UNPACKER.asm deleted file mode 100644 index 1e7964d..0000000 --- a/src/bios/old_files/EXP_DCP_UNPACKER.asm +++ /dev/null @@ -1,110 +0,0 @@ -; -;-----------------------------------------------------------------------; -; !TODO сравнить как запакуется DCP алгоритмом для k50 -DCP_INIT: - EXX - LD HL,DCP_DATA - LD DE,#C000 -.loop0: - LD B,8 - LD C,(HL) - INC HL -.loop1: - RLC C - JR C,.loop2 - SUB A - LD (DE),A - INC DE - DJNZ .loop1 - JR .loop3 -.loop2: - LD A,(HL) - INC HL - LD (DE),A - INC DE - DJNZ .loop1 -.loop3: - INC D - DEC D - JR NZ,.loop0 - - LD HL,#C000 ; CONFIG-3 for DOS & other fns - LD DE,#F000 - LD BC,#0400 - LDIR ; DE = #F400 !!! - LD HL,#F000 - ;LD DE,#F400 - LD BC,#0C00 - LDIR - -; First IN command - OPEN DCP - IN A,(SLOT3) - EXX - JP (HL) -;-----------------------------------------------------------------------; - - -;-----------------------------------------------------------------------; -; Функция дешифратора портов. -; HL - адрес -; DE - маска - 0 изменяемые биты, 1 неизменяемые -; B - порт -; DCP_FN0M: -; LD A,L -; AND E -; LD L,A - -; LD A,H -; AND D -; ; AND #3F -; OR #C0 -; LD H,A - -; LD A,D -; OR #C0 -; LD D,A - -; .loop: LD (HL),B - -; LD A,L ; замаскировать неизменяемые биты 1-ми -; OR E ; для прохождения переноса -; INC A ; увеличить адрес -; JR Z,.carry ; возник перенос - -; OR E -; XOR E ; обнулить неизменяемые биты -; LD C,A ; изменяемая часть - -; LD A,L -; AND E ; выделить неизменяемую -; OR C -; LD L,A ; добавить изменяемую часть - -; JR .loop ; цикл - -; .carry: ; A = 0 -; ; OR E -; ; XOR E -; ; LD C,A -; LD A,L ; забить изменяемые биты нулями -; AND E -; ; OR C -; LD L,A - -; LD A,H ; замаскировать неизменяемые биты 1-ми -; OR D ; для прохождения переноса -; INC A ; увеличить адрес -; JR Z,.exit - -; OR D -; XOR D -; LD C,A ; изменяемая часть - -; LD A,H -; AND D ; выделить неизменяемую -; OR C -; LD H,A ; добавить изменяемую часть -; JR .loop - -; .exit: JP (IX) -;-----------------------------------------------------------------------; diff --git a/src/bios/old_files/FONT.FNT b/src/bios/old_files/FONT.FNT deleted file mode 100644 index 441e654f3abaea5bac39cdfa8e6c782d574001e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmb7_v1=Sh6viKpxTF}QEfzc=ac6@6fFTZIi$xBuT)Ig=NMhn*3RRbZOjb_kB85u3 zOOwWRTEk$$RF5OoVzS3^)wwZZ2|`}*Fq=1fCn1Lv&g`zR- z2w1`%6tEO*d9qnDTi^Hiathm_3sq=JU;B~wHU=9!KSy8J?Hgxj6>M!@66^cd-#1y7 z~Zl7E#6kN}h4=mNj=v9R>x^88En;HX({ zm#R5}vgBOAecpr7+IlU8P-zFupCFb_BBBri1bU;CK0H(?n35MOtx(|~1HYG&7sM}t zfll9(8w45~n&4udjU77W8btxyzVN9DU#Y||-Zxmpkg=Y1tiAswtqVIFnA5i9b3loaANNHlGQ`bmv&&mw~edDyN=4 zb;Pe_yz;~^1@UYARSK?w8)=x4Q+>jez|PF4b8CnA1mcHcf8ei1v)S8mO!!Xtrrhw4 z8gCr=!!(8hzU|S3LH{;~_A(EbdArenlHZ+t= z>y$Ar2%?M&Z_x_kuM7GP=bjuxBiQ1U;v*uGJEktpYkZLsL#q&+>Ug8fwKbFMb9dNa)N&YJ7-XlSpmNIp zAi!bDe@XdI51tBzNss123nfSCZBiVav}ArQYD8-#`xZ^q_ITh=j;H+ht5u?>&N~0s z{Jx==hxp+8_Y|K&{~`aW&{4@7Bqy3w5a~!4NEMJKX>i~ty;-G^rFf!mv~x85L>$w* z0$}hz`Dv(sShcI>*_~4DVs)$jgBE@Yss0oHGaG^#8zamK=|?5aV5n`rJB`pR@}rlw^pgDXP`ELq#}snDJUs{ar@`M-~iUDI3dtg!q%j$%*#w=-WE znzuv#Q;9T#{;Ax5F25tUaUWS)ud_3Z)|l*`ctJZ$E&!@@07a4h{|sL`QjAVR-T!Fv z)3JYbKb_q4uGi_(qN%mx%?yoPxAW_VoBIghi<=JIp5NsE=kwEtIefa_8hpL}Kjn+~ A9smFU diff --git a/src/bios/old_files/SP_EXP2_dasm.asm b/src/bios/old_files/SP_EXP2_dasm.asm deleted file mode 100644 index fee15df..0000000 --- a/src/bios/old_files/SP_EXP2_dasm.asm +++ /dev/null @@ -1,565 +0,0 @@ -; z80dasm 1.2.0 -; command line: z80dasm -a -l -u -t -g 0x0000 -o /Users/tolik/Library/CloudStorage/GoogleDrive-tolik.trek@gmail.com/╨Ь╨╛╨╣ ╨┤╨╕╤Б╨║/Progs/ASM/GIT/DSS 1.70b/Build/SP_EXP2_dasm.a80 /Users/tolik/Downloads/SP_EXP2.BIN - - org 00000h -;-----------------------------------------------------------------------; -l0000h: di ;0000 f3 . - halt ;0001 76 v -; - BLOCK #10-$,#FF - ret ;0010 c9 . -; - BLOCK #38-$,#FF - ei ;0038 fb . - reti ;0039 ed 4d . M -; - BLOCK #66-$,#C9 - retn ;0066 ed 45 . E -; -;-----------------------------------------------------------------------; -; - -; -;-----------------------------------------------------------------------; - BLOCK #100-$,#FF -l0100h: pop af ;0100 f1 . - call sub_010eh ;0101 cd 0e 01 . . . - jp l3fe8h ;0104 c3 e8 3f . . ? -l0107h: - pop af ;0107 f1 . - call sub_010eh ;0108 cd 0e 01 . . . - jp l3ff0h ;010b c3 f0 3f . . ? - - -sub_010eh: - push af ;010e f5 . - ld a,c ;010f 79 y - and a ;0110 a7 . - jp z,l030ch ;0111 ca 0c 03 . . . - dec a ;0114 3d = - jp z,l02b1h ;0115 ca b1 02 . . . - dec a ;0118 3d = - jp z,l02cch ;0119 ca cc 02 . . . - dec a ;011c 3d = - jp z,l017bh ;011d ca 7b 01 . { . - dec a ;0120 3d = - jp z,l019ch ;0121 ca 9c 01 . . . - dec a ;0124 3d = - jp z,l01a7h ;0125 ca a7 01 . . . - dec a ;0128 3d = - jp z,l0247h ;0129 ca 47 02 . G . - dec a ;012c 3d = - jp z,l0424h ;012d ca 24 04 . $ . - pop af ;0130 f1 . - scf ;0131 37 7 - ret ;0132 c9 . - - -sub_0133h: - ld d,a ;0133 57 W - in a,(0e2h) ;0134 db e2 . . - ex af,af' ;0136 08 . - ld a,0feh ;0137 3e fe > . - out (0e2h),a ;0139 d3 e2 . . - ld a,(0c60ch) ;013b 3a 0c c6 : . . - ld e,a ;013e 5f _ - ex af,af' ;013f 08 . - out (0e2h),a ;0140 d3 e2 . . - ld a,d ;0142 7a z - ld d,000h ;0143 16 00 . . - ld ix,0 ;0145 dd 21 00 00 . ! . . - ld b,001h ;0149 06 01 . . -sub_014bh: - push af ;014b f5 . - push hl ;014c e5 . - call sub_03d4h ;014d cd d4 03 . . . -l0150h: - jr nc,l0156h ;0150 30 04 0 . -l0152h: - pop hl ;0152 e1 . -l0153h: - pop af ;0153 f1 . -l0154h: - scf ;0154 37 7 -l0155h: - ret ;0155 c9 . -l0156h: - ld a,b ;0156 78 x - ld bc,l0152h ;0157 01 52 01 . R . - out (c),a ;015a ed 79 . y - ld bc,l0153h ;015c 01 53 01 . S . - out (c),l ;015f ed 69 . i - ld bc,l0154h ;0161 01 54 01 . T . - out (c),e ;0164 ed 59 . Y - ld bc,l0155h ;0166 01 55 01 . U . - out (c),d ;0169 ed 51 . Q - ld bc,04152h ;016b 01 52 41 . R A - dec b ;016e 05 . - in a,(c) ;016f ed 78 . x - and 0f0h ;0171 e6 f0 . . - or h ;0173 b4 . - inc b ;0174 04 . - out (c),a ;0175 ed 79 . y - pop hl ;0177 e1 . - pop af ;0178 f1 . - and a ;0179 a7 . - ret ;017a c9 . -l017bh: - pop af ;017b f1 . - and a ;017c a7 . - inc b ;017d 04 . - dec b ;017e 05 . - ret z ;017f c8 . - call sub_03aeh ;0180 cd ae 03 . . . - ret c ;0183 d8 . - call sub_014bh ;0184 cd 4b 01 . K . - ret c ;0187 d8 . - exx ;0188 d9 . - ld c,0e2h ;0189 0e e2 . . - in b,(c) ;018b ed 40 . @ - exx ;018d d9 . - out (0e2h),a ;018e d3 e2 . . - ex af,af' ;0190 08 . - ld a,0c0h ;0191 3e c0 > . - out (089h),a ;0193 d3 89 . . - ld bc,04153h ;0195 01 53 41 . S A - ld a,020h ;0198 3e 20 > - and a ;019a a7 . - ret ;019b c9 . -l019ch: - pop af ;019c f1 . - call sub_03aeh ;019d cd ae 03 . . . - ret c ;01a0 d8 . - call sub_0133h ;01a1 cd 33 01 . 3 . - ret c ;01a4 d8 . - jr l01b4h ;01a5 18 0d . . -l01a7h: - pop af ;01a7 f1 . - and a ;01a8 a7 . - inc b ;01a9 04 . - dec b ;01aa 05 . - ret z ;01ab c8 . - call sub_03aeh ;01ac cd ae 03 . . . - ret c ;01af d8 . - call sub_014bh ;01b0 cd 4b 01 . K . - ret c ;01b3 d8 . -l01b4h: - exx ;01b4 d9 . - ld c,0e2h ;01b5 0e e2 . . - in b,(c) ;01b7 ed 40 . @ - exx ;01b9 d9 . - out (0e2h),a ;01ba d3 e2 . . - ex af,af' ;01bc 08 . - ld a,0c0h ;01bd 3e c0 > . - out (089h),a ;01bf d3 89 . . - ld bc,04153h ;01c1 01 53 41 . S A - ld a,020h ;01c4 3e 20 > - out (c),a ;01c6 ed 79 . y -l01c8h: - ld bc,04053h ;01c8 01 53 40 . S @ - in a,(c) ;01cb ed 78 . x - bit 7,a ;01cd cb 7f . . - jr nz,l01c8h ;01cf 20 f7 . - bit 3,a ;01d1 cb 5f . _ - jr nz,l01e8h ;01d3 20 13 . - ld a,000h ;01d5 3e 00 > . - out (089h),a ;01d7 d3 89 . . -l01d9h: - exx ;01d9 d9 . - out (c),b ;01da ed 41 . A - exx ;01dc d9 . - ld bc,#0051 ;01dd 01 51 00 . Q . - in a,(c) ;01e0 ed 78 . x - and a ;01e2 a7 . - scf ;01e3 37 7 - ret nz ;01e4 c0 . - ex af,af' ;01e5 08 . - and a ;01e6 a7 . - ret ;01e7 c9 . -l01e8h: - ld bc,#0050 ;01e8 01 50 00 . P . -l01ebh: - ini ;01eb ed a2 . . - ini ;01ed ed a2 . . - ini ;01ef ed a2 . . - ini ;01f1 ed a2 . . - ini ;01f3 ed a2 . . - ini ;01f5 ed a2 . . - ini ;01f7 ed a2 . . - ini ;01f9 ed a2 . . - ini ;01fb ed a2 . . - ini ;01fd ed a2 . . - ini ;01ff ed a2 . . - ini ;0201 ed a2 . . - ini ;0203 ed a2 . . - ini ;0205 ed a2 . . - ini ;0207 ed a2 . . - ini ;0209 ed a2 . . - jp nz,l01ebh ;020b c2 eb 01 . . . -l020eh: - ini ;020e ed a2 . . - ini ;0210 ed a2 . . - ini ;0212 ed a2 . . - ini ;0214 ed a2 . . - ini ;0216 ed a2 . . - ini ;0218 ed a2 . . - ini ;021a ed a2 . . - ini ;021c ed a2 . . - ini ;021e ed a2 . . - ini ;0220 ed a2 . . - ini ;0222 ed a2 . . - ini ;0224 ed a2 . . - ini ;0226 ed a2 . . - ini ;0228 ed a2 . . - ini ;022a ed a2 . . - ini ;022c ed a2 . . - jp nz,l020eh ;022e c2 0e 02 . . . - ld a,h ;0231 7c | - or l ;0232 b5 . - jr nz,l01c8h ;0233 20 93 . - ld a,0feh ;0235 3e fe > . - out (0e2h),a ;0237 d3 e2 . . - ex af,af' ;0239 08 . - ld hl,0c200h ;023a 21 00 c2 ! . . - ld l,a ;023d 6f o - ld a,(hl) ;023e 7e ~ - out (0e2h),a ;023f d3 e2 . . - ex af,af' ;0241 08 . - ld hl,0c000h ;0242 21 00 c0 ! . . - jr l01c8h ;0245 18 81 . . -l0247h: - pop af ;0247 f1 . - and a ;0248 a7 . - inc b ;0249 04 . - dec b ;024a 05 . - ret z ;024b c8 . - call sub_03aeh ;024c cd ae 03 . . . - ret c ;024f d8 . - call sub_014bh ;0250 cd 4b 01 . K . -l0253h: - ret c ;0253 d8 . - exx ;0254 d9 . - ld c,0e2h ;0255 0e e2 . . - in b,(c) ;0257 ed 40 . @ - exx ;0259 d9 . - out (0e2h),a ;025a d3 e2 . . - ex af,af' ;025c 08 . - ld bc,04153h ;025d 01 53 41 . S A - ld a,030h ;0260 3e 30 > 0 - out (c),a ;0262 ed 79 . y -l0264h: - ld bc,04053h ;0264 01 53 40 . S @ - in a,(c) ;0267 ed 78 . x - bit 7,a ;0269 cb 7f . . - jr nz,l0264h ;026b 20 f7 . - bit 3,a ;026d cb 5f . _ - jp z,l01d9h ;026f ca d9 01 . . . - ld bc,l0150h ;0272 01 50 01 . P . - ld d,020h ;0275 16 20 . -l0277h: - outi ;0277 ed a3 . . - outi ;0279 ed a3 . . - outi ;027b ed a3 . . - outi ;027d ed a3 . . - outi ;027f ed a3 . . - outi ;0281 ed a3 . . - outi ;0283 ed a3 . . - outi ;0285 ed a3 . . - outi ;0287 ed a3 . . - outi ;0289 ed a3 . . - outi ;028b ed a3 . . - outi ;028d ed a3 . . - outi ;028f ed a3 . . - outi ;0291 ed a3 . . - outi ;0293 ed a3 . . - outi ;0295 ed a3 . . - dec d ;0297 15 . - jp nz,l0277h ;0298 c2 77 02 . w . - ld a,h ;029b 7c | - or l ;029c b5 . - jr nz,l0264h ;029d 20 c5 . - ld a,0feh ;029f 3e fe > . - out (0e2h),a ;02a1 d3 e2 . . - ex af,af' ;02a3 08 . - ld hl,0c200h ;02a4 21 00 c2 ! . . - ld l,a ;02a7 6f o - ld a,(hl) ;02a8 7e ~ - out (0e2h),a ;02a9 d3 e2 . . - ex af,af' ;02ab 08 . - ld hl,0c000h ;02ac 21 00 c0 ! . . - jr l0264h ;02af 18 b3 . . -l02b1h: - pop af ;02b1 f1 . - ld a,0a0h ;02b2 3e a0 > . - ld bc,04152h ;02b4 01 52 41 . R A - out (c),a ;02b7 ed 79 . y - ld a,090h ;02b9 3e 90 > . - call sub_03a5h ;02bb cd a5 03 . . . - and a ;02be a7 . - bit 0,a ;02bf cb 47 . G - ret z ;02c1 c8 . - ld bc,#0051 ;02c2 01 51 00 . Q . - in a,(c) ;02c5 ed 78 . x - cp 001h ;02c7 fe 01 . . - ret z ;02c9 c8 . - scf ;02ca 37 7 - ret ;02cb c9 . -l02cch: - pop af ;02cc f1 . - ld e,000h ;02cd 1e 00 . . - ld bc,04152h ;02cf 01 52 41 . R A - ld a,0a0h ;02d2 3e a0 > . - out (c),a ;02d4 ed 79 . y - call sub_02f1h ;02d6 cd f1 02 . . . - jr nz,l02ddh ;02d9 20 02 . - set 0,e ;02db cb c3 . . -l02ddh: - ld bc,04152h ;02dd 01 52 41 . R A - ld a,0b0h ;02e0 3e b0 > . - out (c),a ;02e2 ed 79 . y - call sub_02f1h ;02e4 cd f1 02 . . . - jr nz,l02ebh ;02e7 20 02 . - set 1,e ;02e9 cb cb . . -l02ebh: - ld a,e ;02eb 7b { - and a ;02ec a7 . - scf ;02ed 37 7 - ret z ;02ee c8 . - and a ;02ef a7 . - ret ;02f0 c9 . -sub_02f1h: - ld hl,001feh ;02f1 21 fe 01 ! . . - ld bc,l0152h ;02f4 01 52 01 . R . - out (c),l ;02f7 ed 69 . i - ld bc,l0153h ;02f9 01 53 01 . S . - out (c),h ;02fc ed 61 . a - ld bc,00252h ;02fe 01 52 02 . R . - in a,(c) ;0301 ed 78 . x - cp l ;0303 bd . - ret nz ;0304 c0 . - ld bc,l0253h ;0305 01 53 02 . S . - in a,(c) ;0308 ed 78 . x - cp h ;030a bc . - ret ;030b c9 . -l030ch: - pop af ;030c f1 . - ld bc,04152h ;030d 01 52 41 . R A - ld a,0a0h ;0310 3e a0 > . - out (c),a ;0312 ed 79 . y - call sub_02f1h ;0314 cd f1 02 . . . - jr nz,l0338h ;0317 20 1f . -l0319h: - ld bc,04053h ;0319 01 53 40 . S @ - in a,(c) ;031c ed 78 . x - bit 7,a ;031e cb 7f . . - jr nz,l0319h ;0320 20 f7 . - ld bc,04153h ;0322 01 53 41 . S A - ld a,0ech ;0325 3e ec > . - out (c),a ;0327 ed 79 . y -l0329h: - ld bc,04053h ;0329 01 53 40 . S @ - in a,(c) ;032c ed 78 . x - bit 7,a ;032e cb 7f . . - jr nz,l0329h ;0330 20 f7 . - bit 3,a ;0332 cb 5f . _ - jr nz,l0346h ;0334 20 10 . - scf ;0336 37 7 - ret ;0337 c9 . -l0338h: - ld bc,04152h ;0338 01 52 41 . R A - ld a,0b0h ;033b 3e b0 > . - out (c),a ;033d ed 79 . y - call sub_02f1h ;033f cd f1 02 . . . - jr z,l0319h ;0342 28 d5 ( . - scf ;0344 37 7 - ret ;0345 c9 . -l0346h: - ld bc,#0050 ;0346 01 50 00 . P . - ld hl,0c600h ;0349 21 00 c6 ! . . - in a,(0e2h) ;034c db e2 . . - ld d,a ;034e 57 W - ld a,0feh ;034f 3e fe > . - out (0e2h),a ;0351 d3 e2 . . - inir ;0353 ed b2 . . - inir ;0355 ed b2 . . - ld a,(0c60ch) ;0357 3a 0c c6 : . . - ld c,a ;035a 4f O - ld b,000h ;035b 06 00 . . - ld hl,0 ;035d 21 00 00 ! . . - ld a,(0c606h) ;0360 3a 06 c6 : . . -l0363h: - add hl,bc ;0363 09 . - dec a ;0364 3d = - jr nz,l0363h ;0365 20 fc . - ld (0c604h),hl ;0367 22 04 c6 " . . -l036ah: - ld bc,04053h ;036a 01 53 40 . S @ - in a,(c) ;036d ed 78 . x - bit 7,a ;036f cb 7f . . - jr nz,l036ah ;0371 20 f7 . - ld bc,04152h ;0373 01 52 41 . R A - dec b ;0376 05 . - in a,(c) ;0377 ed 78 . x - and 010h ;0379 e6 10 . . - ld b,a ;037b 47 G - ld a,(0c606h) ;037c 3a 06 c6 : . . - dec a ;037f 3d = - and 00fh ;0380 e6 0f . . - or 0a0h ;0382 f6 a0 . . - or b ;0384 b0 . - ld h,a ;0385 67 g - ld a,(0c663h) ;0386 3a 63 c6 : c . - bit 1,a ;0389 cb 4f . O - jr z,l038fh ;038b 28 02 ( . - set 6,h ;038d cb f4 . . -l038fh: - ld bc,04152h ;038f 01 52 41 . R A - out (c),h ;0392 ed 61 . a - ld a,(0c60ch) ;0394 3a 0c c6 : . . - ld bc,l0152h ;0397 01 52 01 . R . - out (c),a ;039a ed 79 . y - ld a,d ;039c 7a z - out (0e2h),a ;039d d3 e2 . . - ld a,091h ;039f 3e 91 > . - call sub_03a5h ;03a1 cd a5 03 . . . - ret ;03a4 c9 . -sub_03a5h: - call sub_03aeh ;03a5 cd ae 03 . . . - ret c ;03a8 d8 . - ld bc,04153h ;03a9 01 53 41 . S A - out (c),a ;03ac ed 79 . y -sub_03aeh: - push de ;03ae d5 . - push bc ;03af c5 . - push af ;03b0 f5 . - ld de,0 ;03b1 11 00 00 . . . -l03b4h: - ld bc,04053h ;03b4 01 53 40 . S @ - in a,(c) ;03b7 ed 78 . x - bit 7,a ;03b9 cb 7f . . - jr z,l03c7h ;03bb 28 0a ( . - dec de ;03bd 1b . - ld a,d ;03be 7a z - or e ;03bf b3 . - jr nz,l03b4h ;03c0 20 f2 . - pop af ;03c2 f1 . - pop bc ;03c3 c1 . - pop de ;03c4 d1 . - scf ;03c5 37 7 - ret ;03c6 c9 . -l03c7h: - pop af ;03c7 f1 . - pop bc ;03c8 c1 . - pop de ;03c9 d1 . - and a ;03ca a7 . - ret ;03cb c9 . -l03cch: - pop bc ;03cc c1 . - ld l,e ;03cd 6b k - ld e,d ;03ce 5a Z - ld d,ixl ;03cf dd 55 . U - xor a ;03d1 af . - ld h,a ;03d2 67 g - ret ;03d3 c9 . -sub_03d4h: - ld a,ixh ;03d4 dd 7c . | - and a ;03d6 a7 . - scf ;03d7 37 7 - ret nz ;03d8 c0 . - push bc ;03d9 c5 . - ld bc,04152h ;03da 01 52 41 . R A - dec b ;03dd 05 . - in a,(c) ;03de ed 78 . x - bit 6,a ;03e0 cb 77 . w - jr nz,l03cch ;03e2 20 e8 . - push ix ;03e4 dd e5 . . - pop hl ;03e6 e1 . - in a,(0e2h) ;03e7 db e2 . . - ld c,a ;03e9 4f O - ld a,0feh ;03ea 3e fe > . - out (0e2h),a ;03ec d3 e2 . . - ld a,c ;03ee 79 y - ld (0c107h),a ;03ef 32 07 c1 2 . . - ld bc,(0c604h) ;03f2 ed 4b 04 c6 . K . . - ld a,010h ;03f6 3e 10 > . - scf ;03f8 37 7 -l03f9h: - ex de,hl ;03f9 eb . - add hl,hl ;03fa 29 ) - ex de,hl ;03fb eb . - adc hl,hl ;03fc ed 6a . j - sbc hl,bc ;03fe ed 42 . B - jr nc,l0408h ;0400 30 06 0 . - add hl,bc ;0402 09 . - dec a ;0403 3d = - jr nz,l03f9h ;0404 20 f3 . - jr l040ch ;0406 18 04 . . -l0408h: - inc de ;0408 13 . - dec a ;0409 3d = - jr nz,l03f9h ;040a 20 ed . -l040ch: - ld a,(0c60ch) ;040c 3a 0c c6 : . . - ld b,000h ;040f 06 00 . . - ld c,a ;0411 4f O - xor a ;0412 af . -l0413h: - sbc hl,bc ;0413 ed 42 . B - inc a ;0415 3c < - jr nc,l0413h ;0416 30 fb 0 . - dec a ;0418 3d = - add hl,bc ;0419 09 . - inc l ;041a 2c , - ld h,a ;041b 67 g - ld a,(0c107h) ;041c 3a 07 c1 : . . - out (0e2h),a ;041f d3 e2 . . - pop bc ;0421 c1 . - and a ;0422 a7 . - ret ;0423 c9 . -l0424h: - pop af ;0424 f1 . - bit 0,a ;0425 cb 47 . G - ld a,021h ;0427 3e 21 > ! - jr z,l042dh ;0429 28 02 ( . - ld a,001h ;042b 3e 01 > . -l042dh: - out (0bch),a ;042d d3 bc . . - ret ;042f c9 . - -; -;-----------------------------------------------------------------------; - BLOCK #3FD0-$,#FF - push af ;3fd0 f5 . - ld a,000h ;3fd1 3e 00 > . - out (07ch),a ;3fd3 d3 7c . | - pop af ;3fd5 f1 . -l3fd6h: - ret ;3fd6 c9 . -l3fd7h: - jp l0107h ;3fd7 c3 07 01 . . . - - - BLOCK #3FE0-$,#FF -l3fe0h: - ld a,000h ;3fe0 3e 00 > . - out (03ch),a ;3fe2 d3 3c . < - jp l3fe0h ;3fe4 c3 e0 3f . . ? - rst 38h ;3fe7 ff . -l3fe8h: - push af ;3fe8 f5 . - ld a,000h ;3fe9 3e 00 > . - out (07ch),a ;3feb d3 7c . | - jp l0100h ;3fed c3 00 01 . . . -l3ff0h: - push af ;3ff0 f5 . - di ;3ff1 f3 . - ld a,000h ;3ff2 3e 00 > . - out (03ch),a ;3ff4 d3 3c . < - jr l3fd7h ;3ff6 18 df . . - push af ;3ff8 f5 . - ld a,000h ;3ff9 3e 00 > . - out (03ch),a ;3ffb d3 3c . < - jp l3fd6h ;3ffd c3 d6 3f . . ? - - BLOCK #4000-$,0 -;-----------------------------------------------------------------------; diff --git a/src/bios/rom/ROM.asm b/src/bios/rom/ROM.asm index 1fa2ae8..ef96883 100644 --- a/src/bios/rom/ROM.asm +++ b/src/bios/rom/ROM.asm @@ -83,6 +83,269 @@ JPHL: JP (HL) +; +; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; + +; +;----------------------------[ FOR ZX-MODE ]----------------------------; + IF BIOS_ZXMODE +;!HARDCODE на этот адрес #С0 прыгает в vROM Basic-48 по адресу #3CF0 +; можно попробовать переделать этот адрес там +/* + _mInfoBLOCK #C0-$,0 +;BEGIN: +; Вход через USR 15600 +RET_FROM_BIOS_TO_BASIC48: + CALL CH_2 + CALL COMAND_LINE ; ВЫПОЛНЕНИЕ КОМАНДЫ, ЕСЛИ ЕСТЬ + ; Вход без команды + JP SW_ROM_1 ; ВОЗВРАТ В << MAIN MENU >> +*/ +;-----------------------------------------------------------------------; +; + + +; +;----------------------------[ ??????????? ]----------------------------; +; TURBO_OFF: +; LD A,D_TBOFF +; OUT (SYS_PORT.ON),A +; RET +; +; TURBO_ON: +; LD A,D_TBON +; OUT (SYS_PORT.ON),A +; RET +; +; JP_HL: JP (HL) +; +;PRINT_LINE: +; LD A,(HL) +; INC HL +; CP 0FFh +; RET Z +; RST 10H +; JR PRINT_LINE +; +; JP RESET_128 +;-----------------------------------------------------------------------; +; + + +;-----------------------------------------------------------------------; +; ******* SERVICE ******* +;-----------------------------------------------------------------------; + +;------[ ДЕШИФРАЦИЯ КОМАНДНОЙ СТРОКИ,ПЕРЕДАННОЙ ДЛЯ "EXPANSION" ]-------; +COMAND_LINE: + LD HL,(#5C5D) ;!HARDCODE CH_ADR +COMAND_LOOP: + LD A,(HL) + INC HL + CP ":" + JR Z,COMAND_L1 + CP #0D + JR NZ,COMAND_LOOP + RET + +COMAND_L1: + LD A,(HL) + CP #EA ;!HARDCODE + RET NZ + INC HL +COMAND_OK: ; ОБНАРУЖЕНА КОМАНДА ДЛЯ 'expansion' + LD A,(HL) + INC HL + CP ':' + JP Z,MENU_S1 + CP #0D + JP Z,MENU_S1 + CP 'I' + JR Z,COMAND_ISD + CP 'i' + JR Z,COMAND_ISD + CP 'T' + JR Z,TASK_SWITCH + CP 't' + JR Z,TASK_SWITCH + DEC HL + POP BC + JP BASIC_MENU +MENU_S1: + POP BC + CALL SERVICE + JP SW_ROM_1 + +COMAND_ISD: + LD A,(HL) + INC HL + CP 'S' + JP Z,COMAND_ISD2 + CP 's' + JP Z,COMAND_ISD2 + RET + +COMAND_ISD2: + POP BC + CALL ISDOS + JP SW_ROM_1 + + +TASK_SWITCH: +; *** Сохранить задачу *** + PUSH IY + PUSH IX + PUSH AF + PUSH BC + PUSH DE + PUSH HL + + EXX + EX AF,AF' + + PUSH AF + PUSH BC + PUSH DE + PUSH HL + + LD A,R + PUSH AF + LD A,I + PUSH AF + + LD A,(HL) + RLCA + RLCA + RLCA + RLCA + AND 30H ; новая задача 0..3 + LD C,A + + IN A,(SLOT3) + LD B,A ; 3-я страница текущей задачи + LD A,SYS_PAGE + OUT (SLOT3),A + + LD IX,SYS_PAGE.TASK_DATA ; данные задач + LD E,(IX) ; старая задача + LD D,0 + ADD IX,DE ; данные текущей задачи + LD E,16 + ADD IX,DE ; смещение данных в таблице задач + + LD (IX+1),B ; сохранить страницу 3 + LD HL,0 + ADD HL,SP + LD (IX+2),L ; сохранить стек задачи + LD (IX+3),H + SET 0,(IX) ; установить флаг сохраненности текущей задачи + RES 1,(IX) ; установить флаг, что задача покинута + + LD IX,SYS_PAGE.TASK_DATA + LD E,C + LD D,0 + ADD IX,DE ; новая задача + LD E,16 + ADD IX,DE ; смещение данных в таблице задач + + BIT 1,(IX) +; JR NZ,TASK_IN_WORK ; задача в работе ??? неверное завершение + ; сбрасывать или просто возвращаться + + BIT 0,(IX) ; была сохранена/нет + JR NZ,TASK_SET ; задача существует + +; задачи не было! + LD IX,SYS_PAGE.TASK_DATA + LD A,C ; задача + LD (IX),A ; установить новую задачу текущей + + JP SPECTRUM_TASK ; запустить новую задачу! +; и пока пофиг распределение памяти! + +TASK_SET: + LD IX,TASK_RESTORE + LD A,C + EXX + JP INIT_PAGES ; переключить все страницы! + +TASK_RESTORE: + EXX + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,C + LD IX,SYS_PAGE.TASK_DATA + LD (IX),A ; установить новую задачу текущей + + LD E,A + LD D,0 + ADD IX,DE ; новая задача + LD E,16 + ADD IX,DE + + LD L,(IX+2) ; вспомнить стек + LD H,(IX+3) + LD SP,HL + LD A,(IX+1) ; вспомнить третью страницу + OUT (SLOT3),A + + + POP AF ; восстановить + LD I,A + POP AF + LD R,A + POP HL + POP DE + POP BC + POP AF + EX AF,AF' + EXX + POP HL + POP DE + POP BC + POP AF + POP IX + POP IY + ; вернуться в задачу + +NO_TASK: + POP BC + JP SW_ROM_1 + +; 259F - ADRESS BASIC128 - MAIN_MENU +;-----------------------------------------------------------------------; + + + +;-----------------------------------------------------------------------; +; *** UTILITES *** +;-----------------------------------------------------------------------; + +; C_0030: ; получить раб обл +; CALL_48X 0030h +; RET +C_19E8: ; очистить раб обл + CALL_48X #19E8 ;!HARDCODE + RET +C_1655: ; получить пространство + CALL_48X #1655 ;!HARDCODE + RET +CLS: +C_0D6B: CALL_48 #0D6B ;!HARDCODE + RET +CH_2: LD A,2 +C_1601: ; OPEN CHANEL + CALL_48 #1601 ;!HARDCODE + RET + + INCLUDE '../exp/ZX_MENU.ASM' + INCLUDE '../exp/ZX_MODE.ASM' + ENDIF +;-----------------------------------------------------------------------; +; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; +; + + ;-------------[#1000 SETUP]------------- @@ -137,8 +400,146 @@ SETUP_MAIN: INCLUDE 'src/bios/ROM/SETUP/Main.asm' ShowInfo 'Setup block of ROM end', 0 ; !!!!! test BLOCK_Setup.Length EQU $-BLOCK_Setup ;--------------------------------------- +; + + + +; +; !FIXIT сделать эти фиксированные адреса отдельным файлом и с IF/ELSE и подключать их потом куда надо. +; +;????? посмотреть +;----------------------------------------------------------------------; +; BLOCK #3CC0-$,255 + ; no-magics! +;MAGIC_1: ; ЗАГЛУШКА ДЛЯ MAGIC +; PUSH AF +; LD A,ROM.EXT +; OUT (SYS_PORT.OFF),A +; POP AF +; JP MAGIC_1 +;MAGIC_3: +; PUSH AF +; LD A,ROM.EXT +; OUT (SYS_PORT.OFF),A +; POP AF +; RETN +;MAGIC_2: +;; CALL MG_BEGIN +; JR MAGIC_3 + +;************************* + _mInfoBLOCK #3CE0-$,0 +;SW_ROM_1: + LD HL,#259F ;!HARDCODE Show Main Menu in BASIC-128 + PUSH HL + LD HL,#5B00 ;!HARDCODE + LD A,(HL) + CP #F5 ; #F5 - опкод 'PUSH AF'. Проверяется то ли в #5B00 + JR Z,JP_HL_48 ; ВОЗВРАТ К МЕНЮ BASIC128 + POP HL + JR SW_ROM ; ПРОСТОЙ ВОЗВРАТ +;************************* + + _mInfoBLOCK #3CF0-$,0 + IF BIOS_ZXMODE + +;BEGIN: +; Вход через USR 15600 +RET_FROM_BIOS_TO_BASIC48: + CALL CH_2 + CALL COMAND_LINE ; ВЫПОЛНЕНИЕ КОМАНДЫ, ЕСЛИ ЕСТЬ + ; Вход без команды + JR SW_ROM_1 ; ВОЗВРАТ В << MAIN MENU >> + + ENDIF +;JMP_48: +; LD HL,00h +; JR JP_HL_48 +; +; NOP +; NOP +; NOP + +;*************************************** + _mInfoBLOCK #3CF8-$,0 + ; no basic-48! +;JP_HL_48: + PUSH HL +;SW_ROM: + PUSH AF + LD A,ROM.BIOS ;!FIXIT или поставить тут ROM.EXPANSION ??? + OUT (SYS_PORT.RAM),A + POP AF + RET +;*************************************** +;----------------------------------------------------------------------; +; + +;!TODO спектрумовские утилиты +;----------------------------------------------------------------------; + ; _mInfoBLOCK #3CFA-$,#FF + ; LD A,0 ;!HARDCODE + ; OUT (SYS_PORT.OFF),A + ; POP AF +;----------------------------------------------------------------------; +; + + +; +;----------------------------------------------------------------------; + _mInfoBLOCK #3D00-$,#FF +;DOS_ON: + NOP + RET +;*************************************** + +;*************************************** +; BLOCK #3D02-$,FF +; !TODO можно оприходовать тут 17 байтов +; +;*************************************** + +;*************************************** + _mInfoBLOCK #3D13-$,#FF + NOP + JP ToBIOS_18 +;*************************************** + +;*************************************** +; BLOCK #3D17-$,FF +; !TODO можно оприходовать тут 233 байта +; +;*************************************** + +;*************************************** + _mInfoBLOCK #3E00-$,#FF +;DOS_OFF: + DI + PUSH AF + PUSH BC + LD BC,(#5BFF) ; !HARDCODE + LD A,#C9 + LD (#5BFF),A ; !HARDCODE + CALL #5BFF ; !HARDCODE + LD (#5BFF),BC ; !HARDCODE + POP BC + POP AF + RET +;*************************************** + + +;*************************************** +; BLOCK #3E16-$,FF +; !TODO можно оприходовать тут 10 байтов +; +;*************************************** +; + + + +; ;*************************************** ; _mInfoBLOCK #3FC6-$,#FF ;!FIXIT переделать ПЗУ трдоса и спектрумов под правильный вызов функций биоса (а не вместо функций 4x функции 0x) @@ -149,7 +550,7 @@ BLOCK_Setup.Length EQU $-BLOCK_Setup ; ; LD C,A ; POP AF ; SET 6,C -; CALL ToBIOS_FromEXT +; RST_to_BIOS ; JR RET_TO_TRDOS ;*************************************** ; @@ -158,7 +559,7 @@ BLOCK_Setup.Length EQU $-BLOCK_Setup ; call BIOS from EXTENSION ;RST18h: PUSH AF - LD A,ROM.BIOS ; set exp-rom to slot0 + LD A,ROM.BIOS ; set exp-rom to slot0 OUT (SYS_PORT.ROM),A POP AF RET @@ -171,7 +572,7 @@ BLOCK_Setup.Length EQU $-BLOCK_Setup TRDOS_HD_CMD: POP AF SET 6,C ;!FIXIT переделать ПЗУ трдоса и спектрумов под правильный вызов функций биоса (а не вместо функций 4x функции 0x) - CALL ToBIOS_FromEXT + RST_to_BIOS JR RET_TO_TRDOS ;--------------------------------------- diff --git a/src/bios/rom/SETUP/KEY.asm b/src/bios/rom/SETUP/KEY.asm index a9fde70..fe3bd20 100644 --- a/src/bios/rom/SETUP/KEY.asm +++ b/src/bios/rom/SETUP/KEY.asm @@ -356,7 +356,7 @@ SCL_X: LD A,(IX+K_LOCK) ; RET Z ; XOR A ; LD BC,#02FD -; RST ToBIOS_18 +; RST_to_BIOS ; RET ;---------------------------- ;/////////////////////////////////////////////////////////////////////// diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index 7c5e1b7..1589a63 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -121,7 +121,7 @@ GETTIME: PUSH HL LD D,4 ;HOURS ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #24 ;24 jp nc,.error @@ -130,7 +130,7 @@ GETTIME: LD D,2 ;MINUTES ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #5A ; 60 jp nc,.error @@ -139,7 +139,7 @@ GETTIME: LD D,0 ;SECONDS ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #5A ; 60 jp nc,.error @@ -148,7 +148,7 @@ GETTIME: LD D,7 ;DAY ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #32 ;32 jp nc,.error @@ -157,7 +157,7 @@ GETTIME: LD D,8 ;MONTH ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #13 ;13 jp nc,.error @@ -166,7 +166,7 @@ GETTIME: LD D,#32 ;CENTURY ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #1A ;20 jp c,.error @@ -177,7 +177,7 @@ GETTIME: LD D,9 ;YEAR ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #9A ;100 jp nc,.error @@ -200,7 +200,7 @@ GETTIME: ; LD (HL),A ; LD D,#32 ;CENTURY ; LD C,#F7 ; !HARDCODE -; RST ToBIOS_18 +; RST_to_BIOS_18 POP HL RET @@ -246,14 +246,14 @@ GETTIME: CMOSINIT: LD D,CMOS.Register.CTRLregA ; !FIXIT FREQ ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #26 ; !FIXIT JR NZ,CMSERR LD D,CMOS.Register.CTRLregC ;LD C,BIOS.CMOS_RD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_RD CP #50 RET Z @@ -261,19 +261,19 @@ CMSERR: LD D,CMOS.Register.CTRLregB LD A,#82 ;TIME FORMAT ; !FIXIT CMOS ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR LD D,CMOS.Register.CTRLregA LD A,#26 ; !FIXIT CMOS FREQ ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR LD D,CMOS.Register.CTRLregC LD A,#0 ; !FIXIT CMOS ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR LD HL,GETTIME.default_date @@ -282,13 +282,13 @@ CMSERR: LD D,CMOS.Register.CTRLregB LD A,#02 ;TIME FORMAT ; !FIXIT CMOS ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR ; LD D,13 ; LD A,#80 ; !FIXIT CMOS ; LD C,#F7 ; !HARDCODE - ; RST ToBIOS_18 + ; RST_to_BIOS RET CLEARM: @@ -317,7 +317,7 @@ MEMLOOP: CALL NZ,RCHAIN DJNZ MEMLOOP ;LD C,BIOS.InitMem - ;RST ToBIOS_18 + ;RST_to_BIOS CALL EMM.InitMem LD BC,#400E ;!HARDCODE CALL G_VALUE @@ -409,7 +409,7 @@ EXIT_SETUP: ; LD (JMPHL),HL ; LD C,#F3 - ; RST ToBIOS_18 + ; RST_to_BIOS ; JMPHL EQU $+1 ; JP #0000 ;-----------------------------------------------------------------------; @@ -424,20 +424,20 @@ INSTALL: LD HL,#0000 LD E,1 ;LD C,BIOS.WIN_OPEN - ;RST ToBIOS_18 + ;RST_to_BIOS CALL WIN_OPEN LD DE,0 LD HL,#2050 ;LD BC,7*256 + BIOS.LP_CLS_WIN - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,7 CALL LP_CLS_WIN LD DE,0 LD HL,#0820 ;LD BC,0*256 + BIOS.LP_CLS_WIN - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,0 CALL LP_CLS_WIN @@ -503,10 +503,10 @@ START: ld (ERRSUM.ErrDateTime),a ; LD C,#97 -; RST ToBIOS_18 +; RST_to_BIOS_18 ; XOR A ; LD C,#F2 -; RST ToBIOS_18 +; RST_to_BIOS_18 ;------------------------------ ;!!!!! посмотреть ; CALL KINIT ;------------------------------ ;!!!!! посмотреть @@ -657,7 +657,7 @@ CHEKOK: ;CALL ScreenPOS.GET_CUR LD A,msgStrings.spMemory CALL POSTMSG ;LD C,BIOS.GetMemSize - ;RST ToBIOS_18 + ;RST_to_BIOS CALL EMM.GetMemSize PUSH BC CALL PMEMORY @@ -786,49 +786,49 @@ writeDateTimeToCmos: ;!FIXIT LD A,(HL) LD D,CMOS.Register.hours ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR INC HL LD A,(HL) LD D,CMOS.Register.minutes ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR INC HL LD A,(HL) LD D,CMOS.Register.seconds ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR INC HL LD A,(HL) LD D,CMOS.Register.date ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR INC HL LD A,(HL) LD D,CMOS.Register.month ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR INC HL LD A,(HL) LD D,CMOS.Register.century ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR INC HL LD A,(HL) LD D,CMOS.Register.year ;LD C,BIOS.CMOS_WR - ;RST ToBIOS_18 + ;RST_to_BIOS CALL CMOS_WR RET @@ -859,31 +859,31 @@ RESCREEN: ; CMOSINIT: ; LD D,10 ;FREQ ; LD C,#F6 ;READ CMOS -; RST ToBIOS_18 +; RST_to_BIOS ; CP #26 ; JR NZ,CMSERR ; LD D,12 ; LD C,#F6 -; RST ToBIOS_18 +; RST_to_BIOS ; CP #50 ; RET Z ; CMSERR: ; LD D,10 ; LD A,#26 ;FREQ ; LD C,#F7 -; RST ToBIOS_18 +; RST_to_BIOS ; LD D,11 ; LD A,#02 ;TIME FORMAT ; LD C,#F7 -; RST ToBIOS_18 +; RST_to_BIOS ; LD D,12 ; LD A,#50 ; LD C,#F7 -; RST ToBIOS_18 +; RST_to_BIOS ; LD D,13 ; LD A,#80 ; LD C,#F7 -; RST ToBIOS_18 +; RST_to_BIOS ; RET ;------------------- ;!!!!! посмотреть @@ -911,14 +911,14 @@ RECOVERYstart: .killRAMdisk: LD A,SYS_PAGE.RAMD_KEYS.NUM-1 LD (.RDkey),A ;LD C,BIOS.FreeMemRMD - ;RST ToBIOS_18 + ;RST_to_BIOS CALL EMM.FreeMemRMD JR NC,.setRAMdisk JR Z,.setRAMdisk RET ; непонятная ошибка - выходим .setRAMdisk: LD A,(.RDkey) ;LD BC,ROM_DISK.Pages.Size * 256 + BIOS.GetMemRMD - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,ROM_DISK.Pages.Size CALL EMM.GetMemRMD JR NC,.IMGread ; свободный рамдиск найден @@ -926,7 +926,7 @@ RECOVERYstart: JR Z,.FreeMem ; ошибка - недостаточно памяти, вызываем очистку памяти RET ; непонятная ошибка - выходим .FreeMem: ;LD C,BIOS.FullInit - ;RST ToBIOS_18 + ;RST_to_BIOS CALL EMM.FullInit JR .killRAMdisk ; @@ -986,7 +986,7 @@ FDSTART: CALL POSTMSG POP AF ;LD C,BIOS.DRV_RESET - ;RST ToBIOS_18 + ;RST_to_BIOS CALL FDD_5x.RESET POP BC RET C @@ -1057,7 +1057,7 @@ OS_LOAD: LD A,B LD BC,1*256 + BIOS.DRV_READ PUSH AF - RST ToBIOS_18 + RST ToBIOS_18 POP BC RET C @@ -1379,7 +1379,7 @@ PIDNUM: LD HL,memBUFFER.ID PIDBOARD: ;LD BC,1*256 + BIOS.FN_CRIPT - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,1 CALL FN_CRIPT @@ -1412,13 +1412,13 @@ PIDBOARD: ; RET NZ ; INC HL ; LD BC,#0286 -; RST ToBIOS_18 +; RST_to_BIOS_18 ; INC HL ; LD BC,#0586 -; RST ToBIOS_18 +; RST_to_BIOS_18 ; INC HL ; LD BC,#0286 -; RST ToBIOS_18 +; RST_to_BIOS_18 ; XOR A ; RET @@ -1433,7 +1433,7 @@ PIDBOARD: ; RET NZ ; INC HL ; LD BC,#0A86 -; JP ToBIOS_18 +; JP_to_BIOS PRNHEX: LD D,A RRCA @@ -1520,7 +1520,7 @@ ZXCLS: LD HL,#4000 GET_ID: LD HL,memBUFFER.ID ;LD C,BIOS.FN_VERSION - ;JP ToBIOS_18 + ;JP_to_BIOS JP FN_VERSION diff --git a/src/bios/rom/SETUP/SETTINGS.asm b/src/bios/rom/SETUP/SETTINGS.asm index fab5e36..5b91ca0 100644 --- a/src/bios/rom/SETUP/SETTINGS.asm +++ b/src/bios/rom/SETUP/SETTINGS.asm @@ -10,7 +10,7 @@ SETTINGS: LD A,(NORCLR) LD B,A ;LD C,BIOS.LP_CLS_WIN - ;RST ToBIOS_18 + ;RST_to_BIOS CALL LP_CLS_WIN @@ -372,13 +372,13 @@ FSCREEN: FSC1: PUSH DE ;LD C,BIOS.LP_SET_PLACE - ;RST ToBIOS_18 + ;RST_to_BIOS CALL LP_SET_PLACE LD A,(NORCLR) LD E,A ;LD BC,#50*256+BIOS.LP_PRINT_ATR ;#5083 - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,#50 CALL LP_PRINT_ATR @@ -661,16 +661,16 @@ TCHEKSM: ; TSTCMOS: ; LD C,BIOS.CMOS_TEST -; JP ToBIOS_18 +; JP_to_BIOS ; RDCMOS: ; LD C,BIOS.CMOS_RD -; JP ToBIOS_18 +; JP_to_BIOS ; WRCMOS: ; LD C,BIOS.CMOS_WR -; JP ToBIOS_18 +; JP_to_BIOS READING: LD D,#0E ; !HARDCODE CMOS @@ -793,7 +793,7 @@ SetTime: ld de,#0C20 ld ix,memBUFFER.Shared ;ld c,BIOS.WIN_COPY - ;RST ToBIOS_18 + ;RST_to_BIOS_18 CALL WIN_COPY LD DE,#0C20 ; !HARDCODE @@ -807,7 +807,7 @@ SetTime: ; печать атрибутов LD E,COLORS.INC.RED ;LD BC,#0E * 256 + BIOS.LP_PRINT_ATR - ;RST ToBIOS_18 + ;RST_to_BIOS_18 LD B,#0E CALL LP_PRINT_ATR @@ -835,7 +835,7 @@ SetTime: ; ld a,#46 ; ex af,af' ; ld c,BIOS.BLK_RD_WR - ; rst ToBIOS_18 + ; RST_to_BIOS_18 ;------------------[^] CALL KEY @@ -844,7 +844,7 @@ SetTime: ld de,#0C20 ld ix,memBUFFER.Shared ;ld c,BIOS.WIN_RESTORE - ;JP ToBIOS_18 + ;JP_to_BIOS ;RET JP WIN_RESTORE @@ -863,7 +863,7 @@ setXYpos: ; dec a ;320 ; .set: ; ld c,BIOS.FN_SYNC -; jp ToBIOS_18 +; JP_to_BIOS setVsinc: ld a,@CMOS.Cell.ScreenSET call READCMS @@ -895,14 +895,14 @@ setInt: ld a,@CMOS.Cell.ScreenSET SRA A SRA A ; byte %00xx0000 --> %000000xx .set: ;ld c,BIOS.FN_SYNC - ;rst ToBIOS_18 + ;RST_to_BIOS_18 CALL FN_SYNC LD IX,win_descriptor.tab80x32 LD HL,#0000 LD E,1 ;LD C,BIOS.WIN_OPEN - ;RST ToBIOS_18 + ;RST_to_BIOS CALL WIN_OPEN ld a,(ITEM) diff --git a/src/bios/rom/SETUP/VIDEO_IO.asm b/src/bios/rom/SETUP/VIDEO_IO.asm index 54487dc..ee00b48 100644 --- a/src/bios/rom/SETUP/VIDEO_IO.asm +++ b/src/bios/rom/SETUP/VIDEO_IO.asm @@ -13,7 +13,7 @@ PIC_SET_PAL_FF EQU def_pal_mask*256+BIOS.PIC_SET_PAL ScreenPOS: ;.GET_CUR: ; LD C,BIOS.LP_GET_PLACE -; JP ToBIOS_18 +; JP_to_BIOS .SUBNAME: ;CALL ScreenPOS.GET_CUR @@ -21,7 +21,7 @@ ScreenPOS: LD E,#24 ;.LOCAT: ; LD C,BIOS.LP_SET_PLACE -; JP ToBIOS_18 +; JP_to_BIOS JP LP_SET_PLACE .CRLF: ;CALL ScreenPOS.GET_CUR @@ -61,12 +61,12 @@ PRINTDW: PRINTA: LD E,A ; LD C,BIOS.LP_PRINT_ATR -; JP ToBIOS_18 +; JP_to_BIOS JP LP_PRINT_ATR PRINT_CHAR: ; LD BC,1*256 + BIOS.LP_PRINT_SYM -; JP ToBIOS_18 +; JP_to_BIOS LD B,1 JP LP_PRINT_SYM ; @@ -78,14 +78,14 @@ TPRINTZ: PRINTZ: LD B,0 LD D,B -; JP ToBIOS_18 +; JP_to_BIOS JP LP_PRINT_LINE6 ; PRINTZ: ; ; LD BC,0*256 + BIOS.LP_PRINT_LINE6 ; LD B,0 ; LD D,B -; ; JP ToBIOS_18 +; ; JP_to_BIOS ; JP LP_PRINT_LINE6 HPRINTZ: @@ -93,7 +93,7 @@ HPRINTZ: LD B,0 LD D,B LD E,#0F - ;JP ToBIOS_18 + ;JP_to_BIOS JP LP_PRINT_LINE5 CPRINTZ: @@ -101,7 +101,7 @@ CPRINTZ: LD B,0 LD D,B LD E,A - ;JP ToBIOS_18 + ;JP_to_BIOS JP LP_PRINT_LINE5 ;HL - NUMBER @@ -250,12 +250,12 @@ PBORDER: RET PRSYM: ;LD BC,1*256 + BIOS.LP_PRINT_SYM - ;JP ToBIOS_18 + ;JP_to_BIOS LD B,1 JP LP_PRINT_SYM ; PRSYMB: LD C,BIOS.LP_PRINT_SYM -; JP ToBIOS_18 +; JP_to_BIOS LOGOTYP: CALL LOGOX @@ -292,13 +292,13 @@ NOWLOGO: EI HALT DI - ;RST ToBIOS_18 + ;RST_to_BIOS CALL WIN_OPEN LD DE,0 LD HL,#0920 ;LOGOTYPE SIZE ;LD BC,7*256 + BIOS.LP_CLS_WIN - ;JP ToBIOS_18 + ;JP_to_BIOS LD B,7 JP LP_CLS_WIN @@ -314,7 +314,7 @@ LOGOX: LD IX,win_descriptor.tab320x256 LD HL,#0000 LD E,1 ;LD C,BIOS.WIN_OPEN - ;RST ToBIOS_18 + ;RST_to_BIOS CALL WIN_OPEN SAFE_PORTY @@ -339,7 +339,7 @@ LOGOX: LD IX,win_descriptor.tab320x256 LD D,A ; SET DESKTOP PALETTE & CURSOR COLORS LD E,A ;LD BC,PIC_SET_PAL_FF - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,def_pal_mask CALL PIC_SET_PAL @@ -413,7 +413,7 @@ FADE: XOR A LD D,A LD E,A ;LD BC,PIC_SET_PAL_FF ; !HARDCODE #EE,#EF - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,def_pal_mask CALL PIC_SET_PAL @@ -435,7 +435,7 @@ go_setup: ; !FIXIT LD HL,#0000 LD E,1 ;LD C,BIOS.WIN_OPEN - ;RST ToBIOS_18 + ;RST_to_BIOS CALL WIN_OPEN JP CSETUP @@ -532,7 +532,7 @@ SET_CGA: LD HL,memBUFFER.Shared LD DE,#0000 ; D - ELEMENTS,E - COLOR ;LD BC,PIC_SET_PAL_FF ; #FFA4 - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,def_pal_mask CALL PIC_SET_PAL @@ -540,7 +540,7 @@ SET_CGA: LD HL,memBUFFER.Shared LD DE,#0000 ;D - ELEMENTS,E - COLOR ;LD BC,PIC_SET_PAL_FF ; #FFA4 - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,def_pal_mask CALL PIC_SET_PAL @@ -548,7 +548,7 @@ SET_CGA: LD HL,#80*4+memBUFFER.Shared LD DE,#8080 ;D - ELEMENTS,E - COLOR ;LD BC,PIC_SET_PAL_FF ; #FFA4 - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,def_pal_mask CALL PIC_SET_PAL ; @@ -558,7 +558,7 @@ SET_CGA: LD HL,memBUFFER.Shared LD DE,#0000 ;D - ELEMENTS,E - COLOR ;LD BC,PIC_SET_PAL_FF ; #FFA4 - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,def_pal_mask CALL PIC_SET_PAL @@ -566,7 +566,7 @@ SET_CGA: LD HL,memBUFFER.Shared LD DE,#8000 ;D - ELEMENTS,E - COLOR ;LD BC,PIC_SET_PAL_FF ; #FFA4 - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,def_pal_mask CALL PIC_SET_PAL ; diff --git a/src/bios/shared/CompMacro.asm b/src/bios/shared/CompMacro.asm index cdf63c9..dffa857 100644 --- a/src/bios/shared/CompMacro.asm +++ b/src/bios/shared/CompMacro.asm @@ -63,7 +63,7 @@ LD (RECOVERYstart.RDkey),A PUSH BC ;LD BC,ROM_DISK.Pages.Size * 256 + BIOS.GetMemRMD - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,ROM_DISK.Pages.Size CALL EMM.GetMemRMD POP BC @@ -83,7 +83,7 @@ LD HL,TEMP ;LD C,BIOS.GetMemBlkPages - ;RST ToBIOS_18 ; кидаем в буфер номера страниц RAM disk + ;RST_to_BIOS ; кидаем в буфер номера страниц RAM disk CALL EMM.GetMemBlkPages IN A,(SLOT3) @@ -143,7 +143,7 @@ EX AF,AF' LD HL,TEMP ;адрес буфера данных ;LD BC,2*256 + BIOS.BLK_RD_WR ;число секторов и номер функции - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,2 CALL BLK_RD_WR @@ -158,7 +158,7 @@ EX AF,AF' LD HL,TEMP ;адрес буфера данных ;LD BC,2*256 + BIOS.BLK_RD_WR ;число секторов и номер функции - ;RST ToBIOS_18 + ;RST_to_BIOS LD B,2 ;число секторов CALL BLK_RD_WR @@ -171,4 +171,25 @@ ASSERT 0, Invalid 'RECOVERYmountTYPE' variant - RECOVERYmountTYPE ENDIF ENDM -; \ No newline at end of file +; + +; + MACRO RST_to_BIOS + IF (IsInBIOS = 0) && ($ < #4000) + CALL ToBIOS_FromEXT + ELSE + RST ToBIOS_18 + ENDIF + ENDM + +; + +; + MACRO JP_to_BIOS + IF (IsInBIOS = 0) && ($ < #4000) + JP ToBIOS_FromEXT + ELSE + JP ToBIOS_18 + ENDIF + ENDM +; diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 5dacf55..8cbb5be 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -15,7 +15,7 @@ DEFINE SP2000_ConfID #FEFF - DEFINE BIOS_ZXMODE 0 + DEFINE BIOS_ZXMODE 1 ; Задержка в кадрах после отрисовки логотипа (0 = 256) DEFINE LOGO_DELAY_MIN 25