; ; .LION EQU 0 ; ; .FLEX EQU 1 ; ; .IBMK EQU 1 ; ; .PROJ1 EQU 0 ; ; .PROJ2 EQU 0 ; ; .PROJ3 EQU 1 ; ; .PROJ4 EQU 1 ; ; .PAL EQU 1 ; FastRAM_ON EQU #FB ; Включение кэша IN A,(FastRAM_ON) - прибито гвоздями в конфе ; FastRAM_OFF EQU #7B ; Отключение кэша IN A,(FastRAM_OFF) - прибито гвоздями в конфе ; FastRam_BANK0 EQU #5C ; Переключение страниц кэша при FastRAM_ON в нулевом окне (bit0..1) ; ROM_BANK0 EQU #5C ; Переключение страниц ПЗУ при FastRAM_OFF в нулевом окне (bit0..3) ; ; ; bit4 - Write-Enable (0 - no Write; 1 - Write) ; ;ELCOM256 EQU 1 ; режим ELCOM-256 ; ;IF ELCOM256 = 1 ; Spec_Page EQU #41 ; страница для перехвата ресета и ещё чего-то DCP_PAGE EQU #40 ; страница портов ; Port_All_Mode EQU #204E ; PORT_JOYSTICK EQU 0FFh D_TBON EQU 3 ; данные для включения TURBO D_TBOFF EQU 2 ; данные для включения TURBO D_ROM16ON EQU 1 D_ROM16OFF EQU 0 CNF_0 EQU 04h CNF_1 EQU 0Ch CNF_2 EQU 14h ; CNF_3 EQU 1Ch CNF_512 EQU 80h ; включение Pentagon 128 CBL_DIR EQU 78 ; порт управления COVOX-Blaster ; ; bit 7 - 1 включить CBL ; COVOX_PORT EQU 79 ; ;ELSE ; ;D_TBON EQU 03h ; данные для включения TURBO ; ;D_TBOFF EQU 02h ; данные для включения TURBO ; ;D_ROM16ON EQU 40h ; ;D_ROM16OFF EQU 00h ; ;CNF_0 EQU 04h ; ;CNF_1 EQU 0Ch ; ;CNF_2 EQU 14h ; ;CNF_3 EQU 1Ch ; ;ENDIF ; SPRINTER EQU 4 ; ВЕРСИЯ !!! ; ISD_WARM EQU 3 ; ISD_COLD EQU 0 ; IS_KEY EQU 40h ; ДАННЫЕ ДЛЯ ВЫВОДА В ПОРТ ПРИ ВКЛЮЧЕНИИ IS-DOS ; IS_RAM_ADR EQU 5BC0h ; АДРЕС ЗАГРУЗКИ ПРОГРАММЫ ПЕРЕХОДА В IS-DOS ; TB_WAITES EQU 00H ; WAITы для TURBO-MODE ; NTB_WAITES EQU 00H ; WAITы для neTURBO-MODE ; IS_WAITES EQU 00H ; WAITы для IS-DOS ; ;**************************************** ; ;SYS_PORT_ON EQU 07DH ; ;SYS_PORT_OFF EQU 03DH ;SYS_PORT_ON EQU CNF_PORT ;07CH SYS_PORT_ON EQU #7C SYS_PORT_OFF EQU #3C ; Port_VSYNC EQU #BD ; #61 - 320Lines/49Hz, #41 - 312Lines/50Hz ; .SET_320L EQU #41 ; .SET_312L EQU #61 ; PAL_V_PAGE EQU 09EH ; PAL_SCP EQU 01EH ; ;CNF_PAGE EQU 040H SYS_PAGE EQU 0FEH ; MODE_PAGE EQU 0FCH ; ;SCR_PAGE EQU 0FDH ; ;PAL_PAGE EQU 0FDH ; KBD_COM EQU 1Bh ; KBD_DAT EQU 1Ah COM_B EQU 1Bh ; DAT_B EQU 1Ah COM_A EQU 19h ; DAT_A EQU 18h LPT1_D EQU 1CH LPT1_C EQU 1DH LPT2_D EQU 1EH LPT2_C EQU 1FH STC0_C EQU 10H ; STC1_C EQU 11H ; STC2_C EQU 12H ; STC3_C EQU 13H ; RAMD_LET EQU ('R'-'A') ; P_KBD_OUT EQU 0F8H ; P_KBD_IN EQU 0FEH ; RESET_PAGE EQU #A0 ; ;----------[CMOS Registers]------------- ; CMOSREGS.ScreenSET EQU #1A ; ; %0000 1111 - COLOR STYLE For Setup ; ; %0011 0000 - Frame Int (Default/Pentagon/Scorpion/Original) ; ; %1100 0000 - Screen V-Sinc (Default/312 lines 50 HZ/320 Lines 49 Hz) ; SCREEN_HZ EQU #C0 ; SCREEN_INT EQU #30 ; ;--------------------------------------- ; ;*************************************** ; ;HD_HEADS EQU 5 ; HD_CS EQU 0A0H ; ;HD_S_P_T EQU 17 ; ;HD_S_X_H EQU (HD_S_P_T * HD_HEADS) ; ??? число секторое на цилиндре P_DATS EQU 050H ; READ/WRITE INIR/OTIR P_ERR EQU 051H ; READ ; P_PREC EQU 151H ; WRITE P_S_CNT EQU 152H ; P_S_NUM EQU 153H P_C_LOW EQU 154H P_C_HIG EQU 155H ;<-\ P_HD_CS EQU 4152H ;<-/ P_HDST EQU 4053H ; READ P_CMD EQU 4153H ; WRITE ; P_HD3F6 EQU 4154H ; WRITE 3F6 ; P_HD3F7 EQU 4055H ; READ 3F7 ; ;*************************************** CMOS_DRD equ 0FFBDh CMOS_DWR equ 0BFBDh CMOS_AWR equ 0DFBDh ISA_PORT equ 09FBDh ; ;*************************************** SEC_SIZE EQU 11 CLAST_SIZE EQU 13 RESERV_SECS EQU 14 FATS_NUM EQU 16 FLS_NUM EQU 17 ; S_P_D EQU 19 FORM_CODE EQU 21 S_P_F EQU 22 S_P_T EQU 24 H_P_S EQU 26 SPECIAL_SECS EQU 28 FAT_ID EQU 36H ; ;*************************************** ; SYSTEM_ID EQU 0C020H SYS_SP EQU 0C0FEH ; ДОПОЛНИТЕЛЬНЫЙ СТЕК DISK_TYPE EQU 0C100H ; переадресация дисков COPY_PAGE0 EQU 0C104H ; копии значений портов страниц COPY_PAGE1 EQU 0C105H COPY_PAGE2 EQU 0C106H COPY_PAGE3 EQU 0C107H ; RAMD_VARS EQU 0C108H ; переменные RAM-дисков ; A_RAMD_VARS EQU 0C118H ; текущий RAM-Disk SP_SAVE EQU 0C11AH ; место для сохранения адреса стека ; ERR_SAVE EQU 0C11CH COPY_RGADR EQU 0C11DH ; RAM_MSD EQU 0C11EH ; страница для работы в MS-DOS MSD_SECS EQU 0C11FH ; Число секторов в MS-DOS ; MSD_NAME EQU 0C120H ; Адрес имени найденного файла ; MSD_FAT_SEC EQU 0C122H ; начальный сектор FAT ; INT_ADRESS EQU #C124 ; адрес обработчика прерывания ; INT_PAGE EQU #C126 ; страница с обработчиком прерывания ; INT_ID EQU #C127 ; если = #AA - значить обработчик установлен DS_1440 EQU 0C128H ; флаги переключения 720/1440 F_P_S EQU 0C129H ; число файловых записей в секторе S_P_C EQU 0C12AH ; число секторов каталога COUNT_FL EQU 0C12BH ; счетчик файлов в секторе COUNT_SEC EQU 0C12CH ; счетчик секторов в каталоге ; C_P_B EQU 0C12DH ; число кластеров на блок ОЗУ ; ;CLASTER_LEN EQU 0C12EH ; длина кластера в байтах FAT_FLAG EQU 0C130H ; FAT флаг + FAT sector MSD_CONT_SEC EQU 0C132H ; текущий сектор для MS-DOS MSD_CONT_SEC2 EQU 0C134H S_X_H EQU 0C136H ; количество секторов на цилиндре CONFIG_ALL EQU 0C138H ; описатель конфигурации 2 байта CONFIG_DE EQU 0C13AH ; описатель конфигурации 2 байта CONFIG_BYTE EQU 0C13EH ; байт конфигурации WIN_MAP_SC EQU 0C140H ; WIN_TAB_SC EQU 0C142H ; WIN_SAV_HL EQU 0C144H ; WIN_SAV_DE EQU 0C146H ; WIN_SAV_BC EQU 0C148H WIN_ZG EQU 0C14AH ; WIN_PLACE_WIN EQU 0C14CH ; WIN_GR_MAP EQU 0C14EH SYS_WORK1 EQU 0C150H ; SYS_WORK2 EQU 0C152H ; SYS_WORK3 EQU 0C154H ; SYS_WORK4 EQU 0C156H ; WIN_MAP_LAB1 EQU 0C158H WIN_MODE_SH EQU 0C15CH WIN_MODE_SC EQU 0C15EH MSD_FAT_SEC EQU 0C160H ; начальный сектор FAT MSD_FAT_SEC2 EQU 0C162H ; начальный сектор FAT MSD_CAT_SEC EQU 0C164H ; начальный сектор CAT MSD_CAT_SEC2 EQU 0C166H ; начальный сектор CAT MSD_DAT_SEC EQU 0C168H ; начальный сектор DAT MSD_DAT_SEC2 EQU 0C16AH ; начальный сектор DAT CLASTER_LEN EQU 0C16CH ; длина кластера в байтах CLASTER_LEN2 EQU 0C16EH ; длина кластера в байтах ; ;--------------------------------------------- ; ; vsync: ; ; bit0 1 - 320L, 0 - 312L ; ; bit1 1 - no waits, 0 - original waits ; VSyncAndWaits EQU #C170 ; ;--------------------------------------------- ; ;CMOS_FLAG_1 EQU 0C170H ; GR_BIT_END EQU 7 ; S_BIT_END EQU 7 ; S_BIT_LIN EQU 6 ; S_BIT_MOD EQU 5 ; BIT_1440 EQU 1 BIT_MASK_1440 EQU 00000010B RAMD_KEYS EQU 0C180H ; ключи RAM-Disks RAMD_KEY_NUM EQU 16 ; LIB_TABLE EQU 0C1A0H ; таблицы librares 32 байта ; ; +0 библиотека DOS ; ; ; HDD_INI_TABLE EQU 0C1C0H ; таблицы для ide устройств 32 байта ; ; 0 - копия DRV_HEAD ; ; 1 - секторов на дорожке ; ; 2 - число головок ; ; 3 - количество цилиндров мл. ; ; 4 - количество цилиндров старший. ; ; 5 - секторов на цилиндр мл. ; ; 6 - секторов на цилиндр старш. ; ; 7 - reserv - type ; ; ; FDD_INI_TABLE EQU 0C1E0H ; таблицы для FDD устройств 32 байта RAMD_FAT EQU 0C200H ; расположение блоков RAM-Disk-ов MS_BPB EQU 0C400H ; буфер BPB MS_DIR EQU 0C800H ; буфер DIR sector MS_FAT EQU 0CC00H ; буфер FAT sector ; MS_BUF EQU 0D000H ; буфер DAT sector HD_IDF_ADR EQU #C600 ; .heads EQU HD_IDF_ADR+6 ; .sectors EQU HD_IDF_ADR+12 ; .sec_cyl EQU HD_IDF_ADR+4 WIN_MAP_IX EQU 0E000H ; данные карт окон TASK_DATA EQU 0EC00H ; данные для задач ; ; ***** - Оконные переменные - ***** WIN_SIZE_H EQU 0 ; горизонтальный размер в знакоместах WIN_SIZE_V EQU 1 ; вертикальный размер в знакоместах WIN_PLACE_H EQU 2 ; положение по горизонрали, в знакоместах WIN_PLACE_V EQU 3 ; положение по вертикали в знакоместах WIN_MODE EQU 4 ; режим знакоместа WIN_MODE_S EQU 5 ; дополнительный режим ; ; бит 0 - Sp-SCR, WIN_GR_X EQU 6 ; положение по X в поле графики (по знакомест) WIN_GR_Y EQU 7 ; положение по Y в поле графики (по знакомест) WIN_HL EQU 8 ; сохранение HL WIN_BC EQU 10 ; сохранение BC WIN_DE EQU 12 ; сохранение DE WIN_V_BEG EQU 14 ; начало окна по вертикали WIN_V_END EQU 15 ; конец окна по вертикали WIN_H_BEG EQU 16 ; начало окна по горизонтали WIN_H_END EQU 17 ; конец окна по горизонтали WIN_SIZE_REL EQU 18 ; реальный размер в символах WIN_MODE_E EQU 19 ; дополнительный режим экрана WIN_WORK_1 EQU 20 ; рабочая переменная 1 WIN_WORK_2 EQU 21 ; рабочая переменная 2 WIN_GRAF_X EQU 24 ; начальная координата по X WIN_GRAF_Y EQU 26 ; начальная координата по Y ; USER_VARS EQU 0F000h ; переменные пользователей ; ;SW_ROM EQU 3CF9H ; ; IF .PROJ4 ; ;RGADR EQU 0D0H ; ;RGSCR EQU 0D1H ; ;RGMOD EQU 0D2H ; ;RGACC EQU 0D3H ; ;PGACC EQU 0FCH ; ;PAGE0 EQU 0C0H ; ;PAGE1 EQU 0C5H ; ;PAGE2 EQU 0C2H ; ;PAGE3 EQU 0C0H ; ; ELSE ; ; ENDIF PAGE0 EQU 082H PAGE1 EQU 0A2H PAGE2 EQU 0C2H PAGE3 EQU 0E2H ; ;RGADR EQU 089H ; ;RGSCR EQU 0A9H ; ;RGMOD EQU 099H ; ;RGACC EQU 0B9H RGADR EQU #89 ; PORT_Y EQU #89 ; ;RGSCR EQU 0E9H RGMOD EQU 0C9H ; ;RGACC EQU 0A9H ; ;PGACC EQU 0FCH CNF_PORT EQU 74h ALTERA EQU 1400H WG_COM EQU 00FH WG_TRK EQU 03FH WG_SEC EQU 05FH WG_DATA EQU 07FH P_DOS_FF EQU 0FFH ; BUFER_RD EQU 5D25H PR_BUFER EQU 05B00H AUTO_5B08 EQU 05B08H AUTO_5B5C EQU 05B5CH ; COPY_P128 EQU 05B5CH AUTO_5BFF EQU 05BFFH K_STATE EQU 05C00H KEY_TIME EQU 05C09H REP_K_TYME EQU 05C10H ZG EQU 05C36H ERR_BEEP EQU 05C38H ; KEY_BEEP EQU 05C39H ERR_NR EQU 05C3AH FLAGS EQU 05C3BH TV_FLAG EQU 05C3CH ERR_SP EQU 05C3DH ; LIST_SP EQU 05C3FH ; MODE EQU 05C41H NEW_PPC EQU 05C42H NEW_S_PPC EQU 05C44H PPC EQU 05C45H ; SUB_PPC EQU 05C47H BORDER EQU 05C48H ; EDIT_PPC EQU 05C49H BAS_VARS EQU 05C4BH ; WORK_VAR EQU 05C4DH CHANS EQU 05C4FH CUR_CHL EQU 05C51H BAS_PROG EQU 05C53H ; NEXT_LINE EQU 05C55H DATA_ADR EQU 05C57H E_LINE EQU 05C59H K_CUR EQU 05C5BH CH_ADR EQU 05C5DH ; SINT_ER_AD EQU 05C5FH WORK_SP EQU 05C61H STK_BOT EQU 05C63H STK_END EQU 05C65H ; B_REG EQU 05C67H ; MEM_CALC EQU 05C68H ; FLAGS_2 EQU 05C6AH L_SCR_SIZE EQU 05C6BH ; AUTO_LST_L EQU 05C6CH ; OLD_PPC EQU 05C6EH ; OLD_S_PPC EQU 05C70H ; FLG_INPUT EQU 05C71H ; S_VAR_LEN EQU 05C72H ; SINT_TB_ADR EQU 05C74H ; RAND_SEED EQU 05C76H ; FRAMES EQU 05C78H UDG EQU 05C7BH ; X_Y_COORD EQU 05C7DH ; PRN_POS EQU 05C7FH ; ADR_PR_BUF EQU 05C80H ; ECHO_E EQU 05C82H ; SCR_PL_M EQU 05C84H SCR_PL_L EQU 05C86H ; SCR_POS_M EQU 05C88H SCR_POS_L EQU 05C8AH ; SCROLL_ST EQU 05C8CH ATTR_P EQU 05C8DH ; MASK_P EQU 05C8EH ATTR_T EQU 05C8FH ; MASK_E EQU 05C90H ; FLAGS_ATR EQU 05C91H MEM_BOT EQU 05C92H AUTO_5C9A EQU 05C9AH ; NMI_ADR EQU 05CB0H TOP_CLEAR EQU 05CB2H P_RAMTOP EQU 05CB4H BEG_ADRESS EQU 05CB6H RET_INS EQU 05CC2H AUTO_5CC3 EQU 05CC3H DISK_A EQU 05CC8H DISK_B EQU 05CC9H DISK_C EQU 05CCAH DISK_D EQU 05CCBH CAT_SEC EQU 05CCCH DRV_READY EQU 05CCDH RD_WR_COM EQU 05CCEH VAR_1 EQU 05CCFH AUTO_5CD1 EQU 05CD1H AUTO_5CD2 EQU 05CD2H AUTO_5CD3 EQU 05CD3H AUTO_5CD5 EQU 05CD5H DOS_ERROR EQU 05CD6H MED_START EQU 05CD7H DOS_CH_ADR EQU 05CD9H MED_LEN EQU 05CDBH FL_NAME EQU 05CDDH FL_N_2 EQU 05CDFH FL_N_4 EQU 05CE1H FL_N_6 EQU 05CE3H FL_N_7 EQU 05CE4H FL_TYPE EQU 05CE5H FL_START EQU 05CE6H FL_LEN EQU 05CE8H START_CLASTER EQU FL_LEN FL_SIZE EQU 05CEAH FL_PLACE EQU 05CEBH VAR_2 EQU 05CEDH INTERF_I EQU 05CEFH VAR_2_0 EQU 05CF1H VAR_2_1 EQU 05CF2H CONT_SEC EQU 05CF4H CONT_TRK EQU 05CF5H OPER_DISK EQU 05CF6H DOS_FLAG EQU 05CF7H DISK_1_FLG EQU 05CF8H DISK_2_FLG EQU 05CF9H TIME_A EQU 05CFAH TIME_B EQU 05CFBH TIME_C EQU 05CFCH TIME_D EQU 05CFDH COMAND_WG EQU 05CFEH SEC_NUM EQU 05CFFH CONT_BUF_ADR EQU 05D00H WORK_2 EQU 05D02H WORK_4 EQU 05D04H S_NAME_NUM EQU 05D06H N_DEL_FLS EQU 05D07H FST_SYM_NAME EQU 05D08H VAR_3 EQU 05D09H BUF_FLAG EQU 05D0CH BAS_DOS_FLG EQU 05D0EH DOS_ERR_2 EQU 05D0FH ERR_3D00 EQU 05D10H ADR_DOS_COM EQU 05D11H ERR_SP_COPY EQU 05D13H MSG_FLAG EQU 05D15H PDOS_COPY EQU 05D16H FLAG_BOOT EQU 05D17H INT_1_VAR EQU 05D18H CONT_DISK EQU 05D19H ADR_RET EQU 05D1AH DOS_SP EQU 05D1CH FL_NUMBER EQU 05D1EH COM_LN_COPY EQU 05D20H L_5D23 EQU 05D23H BUFER EQU 05D25H AUTO_5D33 EQU 05D33H CLEAR_SEC EQU 05E06H CLEAR_TRK EQU 05E07H TYPE_DISK EQU 05E08H N_FILES EQU 05E09H FREE_SEC EQU 05E0AH CODE_10H EQU 05E0CH DISK_MRK_1 EQU 05E0FH DISK_ALT_NM EQU 05E10H N_DEL_FL EQU 05E19H DISK_NAME EQU 05E1AH ; ;RET_PAGE0 MACRO ; ; LD A,0 ; ; OUT (PAGE0),A ; ; ENDM ; ;RET_PAGE1 MACRO ; ; LD A,5 ; ; OUT (PAGE1),A ; ; ENDM ; ;RET_PAGE2 MACRO ; ; LD A,2 ; ; OUT (PAGE2),A ; ; ENDM ; ;RET_PAGE3 MACRO ; ; LD A,0 ; ; OUT (PAGE3),A ; ; ENDM ; MACRO DSS adr,dt ; BLOCK adr-$,dt ; ENDM MACRO CALL_48 adr PUSH HL LD HL,.ADR_R PUSH HL LD HL,SW_ROM PUSH HL LD HL,adr JP JP_HL_48 .ADR_R: POP HL ENDM MACRO CALL_48X adr PUSH HL LD HL,.ADR_R EX (SP),HL PUSH HL LD HL,SW_ROM EX (SP),HL PUSH HL LD HL,adr EX (SP),HL JP SW_ROM .ADR_R: ENDM ; MACRO RAMD_KEY ; SUB 4 ; DI ; LD B,SYS_PAGE ; LD C,PAGE3 ; OUT (C),B ; LD HL,RAMD_KEYS ; ADD A,L ; LD L,A ; DEC L ; LD (A_RAMD_VARS),HL ; INC L ; LD L,(HL) ; RET_PAGE3 ; EI ; LD A,L ; ENDM ; ; Поpты Sprinter. (байты PORT_X)<< ; ; 0 - port FF<< ; ; 1 - port keyboard<< ; ; 2 - port BORDER<< ; ; 3 - port 1FFDh<< ; ; 4 - port 7FFDh<< ; ; 5 - port 3FFDh<< ; ; 6 - port Start-ROM<< ; ; 7 - port Start-ROM-ALT<< ; ; 8 - port ROM-BASIC48<< ; ; 9 - port ROM-BASIC128<< ; ; 10 - port ROM-TR-DOS<< ; ; 11 - port ROM-EXPANSION<< ; ; 12 - port ROM-BASIC48-ALT<< ; ; 13 - port ROM-BASIC128-ALT<< ; ; 14 - port ROM-TR-DOS-ALT<< ; ; 15 - port ROM-EXPANSION-ALT<< ; ; 16 ─┐<< ; ; .. ─┤<< ; ; 31 ─┴─ports RAM-PAGES - поpты указывающие, какая стpаница ОЗУ<< ; ;подключена в качестве стpаницы 0..F в конфигуpации Scorpion.<< ; ; 33 - port RAM-0 стpаница ОЗУ подключаемая в нулевое окно пpоцессоpа<< ; ; 34 - port RAM-5 стpаница ОЗУ подключаемая в пеpвое окно пpоцессоpа<< ; ; 35 - port RAM-2 стpаница ОЗУ подключаемая во втоpое окно пpоцессоpа<< ; ; 36 - port CONFIG<< ; ; 37 - port COVOX-1<< ; ; 38 - port COVOX-2<< ; ; 39 - port AY-3-8910-adr<< ; ; 40 - port AY-3-8910-dat<< ; ; 41 - port KEMPSTON<< ; ; 42 - port ISA-interface<< ; ; 43 ─┐reserv<< ; ; .. ─┤<< ; ; 47 ─┘<< ; ; 48 - 51 поpты ВГ93<< ; ; 52 - поpт DOS-1<< ; ; 53 - поpт DOS-2<< ; ; 54 ─┐ служебные поpты<< ; ; .. ─┤<< ; ; 63 ─┘<< ; ; 64 ─┐ поpты IDE interface<< ; ; .. ─┤<< ; ; 79 ─┘<< ; ; 80..127 - pезеpв.<< ; ; 128..143 - поpты идентификатоpа машины ( только для чтения.)<< ; ; 144..254 - pезеpв<< ; ; 255 - нуль-поpт - отключенное состояние.<< ; ;