; ; MODULE ROM_PART ;------------[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 EI RETI ;--------------------------------------- ;----------------[NMI]------------------ _mInfoBLOCK #66-$,#FF NMI: RETN ;--------------------------------------- ; ; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; ; ;----------------------------[ FOR ZX-MODE ]----------------------------; ;!HARDCODE на этот адрес #С0 прыгает в vROM Basic-48 по адресу #3CF0 ; можно попробовать переделать этот адрес там _mInfoBLOCK #C0-$,#FF ;!TEST 0 INCLUDE 'ZX/ZX_FUNC.ASM' INCLUDE 'ZX/ZX_MENU.ASM' ;-----------------------------------------------------------------------; ; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; ; ;-------------[#1000 SETUP]------------- ShowInfo 'Setup block of ROM start', 0 ; !!!!! test BLOCK_Setup EQU $ ; DISP COMPILE_ADDR.SETUP ShowInfo 'Setup block DISP start', 1 ; !!!!! test SETUP_MAIN: INCLUDE 'crazy bios/ROM/SETUP/Main.asm' ShowInfo 'Setup block DISP end', 1 ; !!!!! test ENT ShowInfo 'Setup block of ROM end', 0 ; !!!!! test BLOCK_Setup.Length EQU $-BLOCK_Setup ;--------------------------------------- ; ;************************* _mInfoBLOCK #3CE0-$,#FF ;!TEST 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-$,#FF ;!TEST 0 ;JMP_48: ; LD HL,00h ; JR JP_HL_48 ; ; NOP ; NOP ; NOP ;*************************************** _mInfoBLOCK #3CF8-$,#FF ;!TEST 0 ; no basic-48! ;P_HL_48: PUSH HL ;SW_ROM: PUSH AF LD A,vROM.BIOS OUT (CNF_PORT.vZX_ROM),A POP AF RET ;*************************************** ;----------------------------------------------------------------------; ; ; ;----------------------------------------------------------------------; _mInfoBLOCK #3D00-$,#FF ;DOS_ON: NOP RET ;*************************************** ;*************************************** _mInfoBLOCK #3D13-$,#FF NOP CALL ToBIOS_FromEXT JP DOS_OFF ;*************************************** ;*************************************** _mInfoBLOCK #3E00-$,#FF ;DOS_OFF: PUSH AF LD A,R DI PUSH AF PUSH BC ; LD BC,(#5BFF) ; !HARDCODE LD A,#C9 ; Opcode RET LD (#5BFF),A ; !HARDCODE CALL #5BFF ; !HARDCODE LD (#5BFF),BC ; !HARDCODE ; POP BC POP AF JP PO,.no_EI EI .no_EI: POP AF RET ;*************************************** ;--------------[GOTO BIOS]-------------- ; call BIOS from EXTENSION _mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT PUSH AF LD A,vROM.BIOS ; set BIOS to slot0 OUT (CNF_PORT.vBIOS),A POP AF RET ;--------------------------------------- ;!FIXIT переделать ПЗУ трдоса и спектрумов под правильный вызов функций биоса (а не вместо функций 4x функции 0x) ;--------[ From TR-DOS to HDD part2]-------- _mInfoBLOCK #3FD8-$,#FF TRDOS_HD_CMD: POP AF SET 6,C RST_to_BIOS JR RET_TO_TRDOS ;--------------------------------------- ;!FIXIT Можно поправить номера функций при вызовах из TR-DOS и прыгать сразу в BIOS ;-------[ From TR-DOS to API 4x ]------- _mInfoBLOCK #3FF0-$,#FF RET_TO_TRDOS: PUSH AF DI LD A,vROM.BIOS OUT (CNF_PORT.vZX_ROM),A JR TRDOS_HD_CMD ; тут не хватило места в 1 байт, чтоб сразу сделать JP ;--------------------------------------- _mInfoBLOCK #4000-$,#FF ;======================================= ; ENDMODULE ;ROM_PART ;