diff --git a/Shared_Includes b/Shared_Includes index be501b0..710aa4b 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit be501b0cc276065a9981e471dd26f9b069af7604 +Subproject commit 710aa4b5dd4b651bcb01ef5e86150b99dfe739ee diff --git a/macroses/accelerator b/macroses/accelerator new file mode 100644 index 0000000..f8171a6 --- /dev/null +++ b/macroses/accelerator @@ -0,0 +1,71 @@ +; Макросы акселератора для красоты)) + +;--------[выключить акселератор]-------- + MACRO ACC_Off + ld b,b + ENDM +;--------------------------------------- + +;---------[режим приема байта]---------- + MACRO ACC_SetBlockSize + ld d,d +; включает акселератор в режим приема +; байта размера блока далее следует +; команда типа LD A,dat, где dat и будет +; новым размером блока. Если размер +; блока был установлен ранее, его можно +; не устанавливать. + ENDM +;--------------------------------------- + +;-------[заполнение одним байтом]------- + MACRO ACC_FillOneByte + ld c,c +; Операция Fill. Последующая команда +; типа LD (HL),A приведет к заполнению +; указанного ранее количества байт +; значением A + ENDM +;--------------------------------------- + +;----[заполнение вертикальных линий]---- +;Операция Fill для графического экрана. + MACRO ACC_FillScreenOneByte + ld e,e +; Последующая команда типа LD (HL),A +; приведет к заполнению значением A +; вертикальных линий экрана указанным +; ранее количеством байт + ENDM +;--------------------------------------- + +;----------[копирование блока]---------- + MACRO ACC_CopyBlock + ld l,l +; Последующая команда типа LD A,(HL) +; приведет к заполнению ОЗУ акселератора +; данными из адреса (HL), а команда типа +; LD (DE),A приведет к перезаписи данных +; из ОЗУ акселератора в основное или +; видео-ОЗУ. + ENDM +;--------------------------------------- + +;---[копирование графического блока]---- + MACRO ACC_CopyScreenBlock + ld a,a +; копирование блока для граф. экрана. +; Последующая команда типа LD A,(HL) +; приведет к заполнению ОЗУ акселератора +; данными из адреса (HL), а команда типа +; LD (DE),A приведет к перезаписи данных +; из ОЗУ акселератора в видео-ОЗУ +; вертикальными линиями. + ENDM +;--------------------------------------- + +;--------------[Reserved]--------------- + MACRO ACC_Reserved + LD H,H + ENDM +;--------------------------------------- \ No newline at end of file diff --git a/macroses/macros b/macroses/macros new file mode 100644 index 0000000..b8fc631 --- /dev/null +++ b/macroses/macros @@ -0,0 +1,73 @@ +; + MACRO FRAM_ON + IN A,(FastRAM_ON) + IF Emulator + PUSH BC + PUSH AF + LD BC,#1FFD + XOR A + OUT (C),A + OUT (FastRam_BANK0),A + POP AF + POP BC + ENDIF + ENDM + + MACRO FRAM_OFF + IN A,(FastRAM_OFF) + IF Emulator + PUSH BC + PUSH AF + LD BC,#1FFD + LD A,1 + OUT (C),A + XOR A + OUT (FastRam_BANK0),A + POP AF + POP BC + ENDIF + ENDM +; +; + MACRO PrintProc + + MODULE PrintF +;--------------------------------------- +printstr: +; в рег. HL адрес на печатаемый буфер + LD C,Dss.PChars + jp ToDSS +;--------------------------------------- + +;--------------------------------------- +; в рег. A число печатаемое как hex +printhex: + LD D,A + RRCA + RRCA + RRCA + RRCA + AND #0F + ADD A,#30 + CP #3A + JR C,.PRNH1 + ADD A,7 +.PRNH1: + CALL .PRINT_CHAR + LD A,D + AND #0F + ADD A,#30 + CP #3A + JP C,.PRINT_CHAR + ADD A,7 + JP .PRINT_CHAR +; в регистре A символ для печати +.PRINT_CHAR: + LD BC,#0182 + JP ToBIOS +;--------------------------------------- + ENDMODULE + + ENDM +; +; \ No newline at end of file diff --git a/spectrum.asm b/spectrum.asm index baa14d7..bdd5b3c 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -138,7 +138,19 @@ BEGIN: LD (LINE_X),IX LD HL,START_MSG LD C,Dss.PChars RST ToDSS - + ; + ; + LD C,Dss.Version + RST ToDSS + SCF + LD HL,256*DSS_MIN_VERS.vers + DSS_MIN_VERS.modf + SBC HL,DE + JP NC,ERROR_OLD_DSS + LD HL,DSS_MIN_VERS.build + SBC HL,BC + JR NC,ERROR_OLD_DSS + ; + ; IN A,(SLOT3) LD (SAVE_SLOT3),A ; @@ -203,17 +215,21 @@ BEGIN: LD (LINE_X),IX ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; Error_NoMemForSPpages: LD HL,NO_MEM_MSG + LD B,DSS_Error.sys.NOT_ENOUGH_MEMORY JR ERROR_FILE.prn_msg + ; ; ERROR_FILE: LD HL,ERROR_FILE_MSG_X LD C,Dss.PChars RST ToDSS ; - LD A,(FILE_HANDLE) - LD C,Dss.Close - RST ToDSS + ; LD A,(FILE_HANDLE) + ; LD C,Dss.Close + ; RST ToDSS ; LD HL,ONE_FILE -.prn_msg: LD C,Dss.PChars + LD B,DSS_Error.sys.FILE_NOT_FOUND +.prn_msg: PUSH BC + LD C,Dss.PChars RST ToDSS ; LD A,(vROM_LOAD_BIN.need_free) @@ -225,20 +241,31 @@ ERROR_FILE: LD HL,ERROR_FILE_MSG_X RST ToBIOS ; .skip_free: LD HL,ERROR_FILE_MSG - JR EXIT_ALL + POP BC + JR EXIT_NOW + ; ; ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG - JR EXIT_ALL -END_CNF_ERROR: - LD HL,ERROR_CNF -EXIT_ALL: LD C,Dss.PChars + JR EXIT_NOW + ; ; +ERROR_OLD_DSS: LD HL,MSG_OLD_DSS + JR EXIT_NOW + ; ; +EXIT_ALL: LD B,DSS_Error.sys.NO_ERROR + JR EXIT_NOW + ; ; +END_CNF_ERROR: LD HL,ERROR_CNF + LD B,DSS_Error.sys.UNKNOWN_FORMAT +EXIT_NOW: PUSH BC + LD C,Dss.PChars RST ToDSS ; LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages.vRAM RST ToBIOS -.loop: LD BC,Dss.Exit + POP BC +.loop: LD C,Dss.Exit RST ToDSS JR .loop - ; + ; ; ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -1470,6 +1497,7 @@ MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 ;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 +MSG_OLD_DSS: DB 13,10, 'To run this version of SPECTRUM launcher you need DSS v1.70.998 or higher.',13,10,0 PROGRES_IND: DB '░',0 ; 176 PROGRES_100: DB ' 100%',13,10,0 diff --git a/version.inc b/version.inc index 4ab0611..1fa0715 100644 --- a/version.inc +++ b/version.inc @@ -5,4 +5,9 @@ ENDLUA DEFINE SP_VERSION "2.03 beta build" +; +DSS_MIN_VERS: +.vers EQU 1 +.modf EQU 70 +.build EQU 998 ; \ No newline at end of file