diff --git a/Build/Bin/LOADER_K30.BIN b/Build/Bin/LOADER_K30.BIN index a3e5785..70783d6 100644 Binary files a/Build/Bin/LOADER_K30.BIN and b/Build/Bin/LOADER_K30.BIN differ diff --git a/Build/Bin/LOADER_K50.BIN b/Build/Bin/LOADER_K50.BIN index 674b027..81fe8fd 100644 Binary files a/Build/Bin/LOADER_K50.BIN and b/Build/Bin/LOADER_K50.BIN differ diff --git a/Shared_Includes b/Shared_Includes index 26bf620..dd760c8 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 26bf62088ab35a8d4e65c0baf1e3fa350ff9a5d5 +Subproject commit dd760c8eb76459b879274731f34b72ed9bb9c70f diff --git a/bios/BIOS.asm b/bios/BIOS.asm index 6ae359b..f4b41cc 100644 --- a/bios/BIOS.asm +++ b/bios/BIOS.asm @@ -16,6 +16,7 @@ ;---------------------------------------; ;-----------[Shared Includes]----------- + INCLUDE 'bios/defines.inc' INCLUDE 'bios/shared/includes.inc' ; Includes ;--------------------------------------- diff --git a/bios/DEFINES.INC b/bios/DEFINES.INC new file mode 100644 index 0000000..7fed2be --- /dev/null +++ b/bios/DEFINES.INC @@ -0,0 +1 @@ + DEFINE UNDOCUMENTED_GFX_FUNC 1 \ No newline at end of file diff --git a/bios/exp/BIOS_FUNC.asm b/bios/exp/BIOS_FUNC.asm index 8942205..b8d589e 100644 --- a/bios/exp/BIOS_FUNC.asm +++ b/bios/exp/BIOS_FUNC.asm @@ -141,21 +141,42 @@ TAB_FNS: DB low EMM.FullInit ; #9F инициализация всей памяти, системных переменных ; Ax DB low PIC_FN0_OpenWin ; #A0 ОТКРЫТИЕ ОКНА + + IF UNDOCUMENTED_GFX_FUNC DB low PIC_FN1 ; #A1 ВЫВЕСТИ ТОЧКУ DB low PIC_FN2 ; #A2 ВЫВОД ЛИНИИ COPY DB low PIC_FN3 ; #A3 ВЫВОД ЛИНИИ FILL + ELSE + DB low FN_RESERVED ;PIC_FN1 + DB low FN_RESERVED ;PIC_FN2 + DB low FN_RESERVED ;PIC_FN3 + ENDIF + DB low PIC_SET_PAL ; #A4 ВЫВОД ПАЛИТРЫ + + IF UNDOCUMENTED_GFX_FUNC DB low PIC_FN5 ; #A5 УСТАНОВКА RGMOD + ELSE + DB low FN_RESERVED ;PIC_FN5 + ENDIF + DB low SET_PAL_INIT ; #A6 A - page_pal, E - номер палитры, B - тип палитры + + IF UNDOCUMENTED_GFX_FUNC DB low PIC_FN7 ; #A7 Рисование линии одного цвета - DB low PIC_FN8 ; #A8 Рисование разноцветной линии - DB low PIC_FN9 ; #A9 нет - DB low PIC_FN10 ; #AA нет - DB low PIC_FN11 ; #AB нет - DB low PIC_FN12 ; #AC нет - DB low PIC_FN14 ; #AD нет - DB low PIC_FN14 ; #AE нет - DB low PIC_FN15 ; #AF нет + DB low PIC_FN8 ; #A8 Рисование разноцветной линии + ELSE + DB low FN_RESERVED ;PIC_FN7 + DB low FN_RESERVED ;PIC_FN8 + ENDIF + + DB low FN_RESERVED ;PIC_FN9 ; #A9 нет + DB low FN_RESERVED ;PIC_FN10 ; #AA нет + DB low FN_RESERVED ;PIC_FN11 ; #AB нет + DB low FN_RESERVED ;PIC_FN12 ; #AC нет + DB low FN_RESERVED ;PIC_FN14 ; #AD нет + DB low FN_RESERVED ;PIC_FN14 ; #AE нет + DB low FN_RESERVED ;PIC_FN15 ; #AF нет ; Bx DB low WIN_OPEN ; #B0 открытие окна по описателю DB low WIN_CLOSE ; #B1 закрытие окна @@ -340,13 +361,13 @@ TAB_FNS: DB high SET_PAL_INIT DB high PIC_FN7 DB high PIC_FN8 - DB high PIC_FN9 - DB high PIC_FN10 - DB high PIC_FN11 - DB high PIC_FN12 - DB high PIC_FN14 - DB high PIC_FN14 - DB high PIC_FN15 + DB high FN_RESERVED ;PIC_FN9 + DB high FN_RESERVED ;PIC_FN10 + DB high FN_RESERVED ;PIC_FN11 + DB high FN_RESERVED ;PIC_FN12 + DB high FN_RESERVED ;PIC_FN14 + DB high FN_RESERVED ;PIC_FN14 + DB high FN_RESERVED ;PIC_FN15 ; Bx DB high WIN_OPEN DB high WIN_CLOSE diff --git a/bios/exp/FUNC_SCREEN.ASM b/bios/exp/FUNC_SCREEN.ASM index 1af0f13..354a8bf 100644 --- a/bios/exp/FUNC_SCREEN.ASM +++ b/bios/exp/FUNC_SCREEN.ASM @@ -1,6 +1,8 @@ - ;****************************************************************** -; вход: DE - вертикаль, HL - горизонталь, + IF UNDOCUMENTED_GFX_FUNC +;****************************************************************** +; ВЫВЕСТИ ТОЧКУ +; вход: E - вертикаль, HL - горизонталь, ; B - цвет точки, A - экран PIC_FN1: AND A @@ -33,9 +35,11 @@ PIC_FN1: OUT (PORT_Y),A RET -; вход: DE - вертикаль, HL - горизонталь. + +; ВЫВОД ЛИНИИ COPY +; вход: E - вертикаль, HL - горизонталь. ; IX - длина линии в точках не 0 !!! -; FILL - by A +; FILL - by A ; ????? PIC_FN2: LD D,A @@ -113,7 +117,7 @@ PIC_FN2_NO4: RET ;************************************************************************ -; вход: dE - вертикаль, HL - горизонталь. +; вход: E - вертикаль, HL - горизонталь. ; A',HL' - адрес данных во второй странице ! ; BC' - длина данных ; ВЫВОД ЛИНИИ ТОЧЕК @@ -135,9 +139,9 @@ PIC_FN3: BIT 0,B LD BC,#40 + #4000 - JR Z,PIC_FN3_NO_2ND + JR Z,.NO_2ND LD BC,#40 + 320 + #4000 -PIC_FN3_NO_2ND: +.NO_2ND: ADD HL,BC LD A,E @@ -164,11 +168,11 @@ PIC_FN3_NO_2ND: EXX LDIR BIT 6,H - JR Z,PIC_FN3_NO + JR Z,.NO RES 6,H EX AF,AF' -PIC_FN3_NO: - EXX + +.NO: EXX LD A,SYS_PAGE OUT (SLOT3),A @@ -183,164 +187,22 @@ PIC_FN3_NO: OUT (PORT_Y),A RET -;************************************************************************** -;PIC_FN4: -; вход: HL - данные палитры RGB, E - начальный цвет -; D - число цветов, B - PAL-mask, A - page PAL -PIC_SET_PAL: - PUSH IX - - EX AF,AF' - IN A,(PORT_Y) - PUSH AF ; сохранить положение PORT_Y - LD A,E - OUT (PORT_Y),A ; начальный цвет в порт - LD A,D ; сохранить число цветов - EX AF,AF' ; вернуть страницу PAL - - BIT 7,H ; проверить адрес данных - LD C,SLOT3 ; если ниже 8000h - LD D,#C3 ; то граф.экран на странице 3 - JR Z,.NO_PAGE1 - LD D,#43 ; иначе - LD C,SLOT1 ; на странице 1 -.NO_PAGE1: - ADD A,A - PUSH AF - - ADD A,A - AND #1C - XOR #E0 ; младший байт адреса PAL - LD E,A ; DE - адрес в видео-ОЗУ - PUSH DE - POP IX ; адрес палитры - - LD D,B ; маска PAL - EX AF,AF' ; вернуть число цветов - LD B,A ; число цветов - - IN E,(C) ; сохранить страницу 3 - LD A,#50 ; страница графического RAM - OUT (C),A - - POP AF - JR C,PIC_GET_PAL - ; цикл установки цветов палитры -.loopPal: - LD A,(HL) ; B - AND D - LD (IX+2),A - INC HL - - LD A,(HL) ; G - AND D - LD (IX+1),A - INC HL - - LD A,(HL) ; R - AND D - LD (IX+0),A - INC HL - - LD A,(HL) ; Y - AND D - LD (IX+3),A - INC HL - - IN A,(PORT_Y) - INC A - OUT (PORT_Y),A - DJNZ .loopPal ; выполнять, пока не 0 - -.exit: OUT (C),E ; восстановить страницу 3 - POP AF - OUT (PORT_Y),A ; восстановить Y_PORT - POP IX - AND A - RET - -PIC_GET_PAL: - ; цикл чтения цветов палитры -.loopPal: - LD A,(IX+2) - LD (HL),A ; B - INC HL - - LD A,(IX+1) - LD (HL),A ; G - INC HL - - LD A,(IX+0) - LD (HL),A ; R - INC HL - - LD A,(IX+3) - LD (HL),A ; Y - INC HL - - IN A,(PORT_Y) - INC A - OUT (PORT_Y),A - DJNZ .loopPal ; выполнять, пока не 0 - - JR PIC_SET_PAL.exit - -;******************************************************************** -PIC_FN5: ; УСТАНОВКА СТРАНИЦЫ MODE +;***************************************************************** +; УСТАНОВКА СТРАНИЦЫ MODE +PIC_FN5: LD A,E AND 1 OUT (RGMOD),A RET -;******************************************************************* -; Установка внутренней палитры -; A - page_pal, E - номер палитры, B - тип палитры -SET_PAL_INIT: - LD D,A - DEC B - JP Z,SET_GRAPH_PALETTE - DEC B - JP Z,SET_TXT_PALETTE.ZX - DEC B - JP Z,SET_TXT_PALETTE.IBM +;***************************************************************** -; LD IX,PAL_DAT1 -; JR Z,PIC_FN6_L1 -; DEC B -; LD IX,PAL_DAT -; JR Z,PIC_FN6_L1 - - SCF - RET - -;PIC_FN6_L1: -; AND 3 -; ADD A,A -; ADD A,A -; ADD A,#E0 -; LD L,A -; LD H,#43 -; IN A,(SLOT1) -; PUSH AF -; -; LD A,#50 -; OUT (SLOT1),A -; XOR A -; OUT (PORT_Y),A -; EX AF,AF' -; call PAL_LOOP_M -; -; POP AF -; OUT (SLOT1),A -; XOR A -; OUT (PORT_Y),A -; -; RET - -;****************************************************************** +;!TODO ; Рисование линии. -; dЕ - вертикаль, HL - горизонталь +; E - вертикаль +; B - номер графического режима и BIT0 - номер экрана +; HL - горизонталь ; H' - высота, C'/DE',B' - add_parameters -; A - color ;!FIXIT заменить сразу на D? +; A - color PIC_FN7: LD D,A IN A,(SLOT1) @@ -459,19 +321,19 @@ PIC_FN8: ; Вывод спрайта на экран ; HL - горизоталь, dE - вертикаль ; A',HL' - адрес данных -PIC_FN9: +;PIC_FN9: ;********************************* ; HL,E - координаты D - color ; B - Magnify -PIC_FN10: -PIC_FN11: -PIC_FN12: -PIC_FN13: -PIC_FN14: -PIC_FN15: - SCF - RET +; PIC_FN10: +; PIC_FN11: +; PIC_FN12: +; PIC_FN13: +; PIC_FN14: +; PIC_FN15: +; SCF +; RET ;************************************ @@ -509,6 +371,163 @@ PIC_FN15: ; RET ;**************************************** +;****************************************************************** + ENDIF +;****************************************************************** + + + +;************************************************************************** +;PIC_FN4: +; вход: HL - данные палитры RGB, E - начальный цвет +; D - число цветов, B - PAL-mask, A - page PAL +PIC_SET_PAL: + PUSH IX + + EX AF,AF' + IN A,(PORT_Y) + PUSH AF ; сохранить положение PORT_Y + LD A,E + OUT (PORT_Y),A ; начальный цвет в порт + LD A,D ; сохранить число цветов + EX AF,AF' ; вернуть страницу PAL + + BIT 7,H ; проверить адрес данных + LD C,SLOT3 ; если ниже 8000h + LD D,#C3 ; то граф.экран на странице 3 + JR Z,.NO_PAGE1 + LD D,#43 ; иначе + LD C,SLOT1 ; на странице 1 +.NO_PAGE1: + ADD A,A + PUSH AF ; PIC_SET_PAL/PIC_GET_PAL + + ADD A,A + AND #1C + XOR #E0 ; младший байт адреса PAL + LD E,A ; DE - адрес в видео-ОЗУ + PUSH DE + POP IX ; адрес палитры + + LD D,B ; маска PAL + POP AF ; PIC_SET_PAL/PIC_GET_PAL + EX AF,AF' ; вернуть число цветов + LD B,A ; число цветов + + IN E,(C) ; сохранить страницу + LD A,#50 ; страница графического RAM + OUT (C),A + + EX AF,AF' ; PIC_SET_PAL/PIC_GET_PAL + JR C,PIC_GET_PAL + ; цикл установки цветов палитры +.loopPal: + LD A,(HL) ; B + AND D + LD (IX+2),A + INC HL + + LD A,(HL) ; G + AND D + LD (IX+1),A + INC HL + + LD A,(HL) ; R + AND D + LD (IX+0),A + INC HL + + LD A,(HL) ; Y + AND D + LD (IX+3),A + INC HL + + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + DJNZ .loopPal ; выполнять, пока не 0 + +.exit: OUT (C),E ; восстановить страницу 3 + POP AF + OUT (PORT_Y),A ; восстановить Y_PORT + POP IX + AND A + RET + +PIC_GET_PAL: + ; цикл чтения цветов палитры +.loopPal: + LD A,(IX+2) + LD (HL),A ; B + INC HL + + LD A,(IX+1) + LD (HL),A ; G + INC HL + + LD A,(IX+0) + LD (HL),A ; R + INC HL + + LD A,(IX+3) + LD (HL),A ; Y + INC HL + + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + DJNZ .loopPal ; выполнять, пока не 0 + + JR PIC_SET_PAL.exit + + +; Установка внутренней палитры +; A - page_pal, E - номер палитры, B - тип палитры +SET_PAL_INIT: + LD D,A + DEC B + JP Z,SET_GRAPH_PALETTE + DEC B + JP Z,SET_TXT_PALETTE.ZX + DEC B + JP Z,SET_TXT_PALETTE.IBM + +; LD IX,PAL_DAT1 +; JR Z,PIC_FN6_L1 +; DEC B +; LD IX,PAL_DAT +; JR Z,PIC_FN6_L1 + + SCF + RET + +;PIC_FN6_L1: +; AND 3 +; ADD A,A +; ADD A,A +; ADD A,#E0 +; LD L,A +; LD H,#43 +; IN A,(SLOT1) +; PUSH AF +; +; LD A,#50 +; OUT (SLOT1),A +; XOR A +; OUT (PORT_Y),A +; EX AF,AF' +; call PAL_LOOP_M +; +; POP AF +; OUT (SLOT1),A +; XOR A +; OUT (PORT_Y),A +; +; RET + +;****************************************************************** + + ;!TODO тут функция CL0 EQU 200 diff --git a/bios/loader/loader.asm b/bios/loader/loader.asm index 529885e..4b5a2c5 100644 --- a/bios/loader/loader.asm +++ b/bios/loader/loader.asm @@ -156,7 +156,7 @@ DEFINE Altera_Chip altera_chip LUA - local file_path = 'Build/ACEX/' + local file_path = '../Build/ACEX/' local file_ext = '.ACX' local altera_ver = sj.get_define("Altera_Chip") sj.insert_define("Altera_File", '"' .. file_path .. altera_ver .. file_ext .. '"')