several fixes

This commit is contained in:
2024-11-30 15:41:09 +01:00
parent 1ed6034d99
commit a5f5c6b9ef
227 changed files with 769511 additions and 94738 deletions

View File

@@ -208,7 +208,7 @@ TmsProbeFailed:
ret
TmsPorts: ; List of ports to probe:
defb 0x80 ; ColecoVision / SG-1000
defb 0xE0 ; ColecoVision / SG-1000
defb 98h ; MSX
defb 10h ; Sord M5 (conflicts with z80ctrl SIO port)
;defb 8 ; Tatung Einstein (conflicts with z80ctrl drive ports)

View File

@@ -6,6 +6,7 @@ CS_VT82C42_CTRL .EQU 0xF1
org 0x6000
;VT82C42
keyboard_init:
ld a, 0xA7 ;Disable Mouse
out (CS_VT82C42_CTRL), A
ld a, 0xAD ;Disable Keyboard

View File

@@ -0,0 +1 @@
kbdtest*

View File

@@ -0,0 +1,640 @@
;This file is generated by the build script.
;Do not make any changes here!
?a0000 equ 0x14C3
?a0001 equ 0x1580
ADDR_RTC equ 0xD0
A_RTS_OFF equ 0x1DA
A_RTS_ON equ 0x1E3
BOOT_PHASE0 equ 0x86
BOOT_PHASE1 equ 0xB7
BOOT_PHASE1_LOOP equ 0xC0
BOOT_PHASE2 equ 0xCB
B_BEEP equ 0x50
B_DSKSEL equ 0x74
B_FATCD equ 0x7D
B_FATCREATE equ 0x80
B_FATOPEN equ 0x77
B_FATREAD equ 0x7A
B_FATWRITE equ 0x83
B_IICRECV equ 0x56
B_IICSEND equ 0x53
B_KEYREAD equ 0x6B
B_KEYREADASCII equ 0x6E
B_KEYSEND equ 0x71
B_PRINTAHEX equ 0x62
B_PRINTCHAR equ 0x59
B_PRINTINLINE equ 0x5F
B_PRINTLN equ 0x65
B_PRINTSTR equ 0x5C
B_READCHAR equ 0x68
COMMAND equ 0x1AA4
COMMAND_ABORT equ 0x1AA1
COMMAND_BACKSPACE equ 0x1AE5
COMMAND_LUT equ 0x1A0F
COMMAND_PROCESS equ 0x1B0B
COMMAND_PROCESS_FOUND equ 0x1B46
COMMAND_PROCESS_LOOP equ 0x1B0E
COMMAND_PROCESS_LOOP_STR1 equ 0x1B17
COMMAND_PROCESS_LOOP_STR2 equ 0x1B2D
COMMAND_PROCESS_NEXT_ENTRY equ 0x1B32
COMMAND_PROCESS_NEXT_ENTRYI equ 0x1B31
COMMAND_PROCESS_NOT_FOUND equ 0x1B3D
COMMAND_READ equ 0x1AB6
CONSOLE_INIT equ 0xEF
CS_APU_CTRL equ 0xF9
CS_APU_DATA equ 0xF8
CS_BANK equ 0x00
CS_CTC_0 equ 0x04
CS_CTC_1 equ 0x05
CS_CTC_2 equ 0x06
CS_CTC_3 equ 0x07
CS_DIP equ 0x01
CS_PIA_CR equ 0x33
CS_PIA_PA equ 0x30
CS_PIA_PB equ 0x31
CS_PIA_PC equ 0x32
CS_PIO_AC equ 0xF6
CS_PIO_AD equ 0xF4
CS_PIO_BC equ 0xF7
CS_PIO_BD equ 0xF5
CS_SIO_A_C equ 0x09
CS_SIO_A_D equ 0x08
CS_SIO_B_C equ 0x0B
CS_SIO_B_D equ 0x0A
CS_VT82C42_CTRL equ 0xF1
CS_VT82C42_DATA equ 0xF0
DHEX_TO_BYTE equ 0x251
DHEX_TO_BYTE_FAILED equ 0x26D
ERR_SYNTAX equ 0x1B5C
EXEC_RST_08 equ 0xDF1
EXEC_RST_10 equ 0xDF5
EXEC_RST_18 equ 0xE01
HEX_TO_BIN equ 0x271
HEX_TO_BIN_2 equ 0x27F
HEX_TO_INVALID_2 equ 0x286
IDE_CMD_IDENT equ 0xEC
IDE_CMD_READSEC equ 0x20
IDE_CMD_WRITESEC equ 0x30
IDE_DEV_TABLE equ 0x1325
IDE_RD equ 0x40
IDE_REG_ALTSTS equ 0x16
IDE_REG_CMDSTS equ 0x0F
IDE_REG_DATA equ 0x08
IDE_REG_DRVADDR equ 0x17
IDE_REG_ERROR equ 0x09
IDE_REG_HCYL equ 0x0D
IDE_REG_HEAD equ 0x0E
IDE_REG_LBA0 equ 0x0B
IDE_REG_LBA1 equ 0x0C
IDE_REG_LBA2 equ 0x0D
IDE_REG_LBA3 equ 0x0E
IDE_REG_LCYL equ 0x0C
IDE_REG_SECTOR equ 0x0A
IDE_REG_SSECTOR equ 0x0B
IDE_RST equ 0x80
IDE_WR equ 0x20
IIC_CLK equ 0x01
IIC_DATA equ 0x02
INT_PIO_ADDRC equ 0xF6
INT_PIO_ADDRD equ 0xF4
INT_VEC equ 0x1B
INT_VEC_TABLE equ 0x4000
IO_AY0_ADDR equ 0x40
IO_AY0_DATA equ 0x41
IO_AY1_ADDR equ 0x42
IO_AY1_DATA equ 0x43
IO_REG0 equ 0x20
IO_RTC_AMPM equ 0x25
IO_RTC_CTR_D equ 0x2D
IO_RTC_CTR_E equ 0x2E
IO_RTC_CTR_F equ 0x2F
IO_RTC_DAY0 equ 0x26
IO_RTC_DAY1 equ 0x27
IO_RTC_HOUR equ 0x24
IO_RTC_MIN0 equ 0x22
IO_RTC_MIN1 equ 0x23
IO_RTC_MON0 equ 0x28
IO_RTC_MON1 equ 0x29
IO_RTC_SEC0 equ 0x20
IO_RTC_SEC1 equ 0x21
IO_RTC_WEEK equ 0x2C
IO_RTC_YEAR1 equ 0x2B
IO_RTC_YERR0 equ 0x2A
MEM_FAT_AMOUNT equ 0x45BC
MEM_FAT_CLUSTERLEN equ 0x45BF
MEM_FAT_COUNT1 equ 0x45C0
MEM_FAT_CURDIR equ 0x45E3
MEM_FAT_CURRDIR equ 0x4643
MEM_FAT_DATASTART equ 0x45C5
MEM_FAT_DIRSEC equ 0x45D1
MEM_FAT_EXEC_COUNT equ 0x4649
MEM_FAT_EXEC_CURR equ 0x4647
MEM_FAT_EXEC_START equ 0x464B
MEM_FAT_FILEREMAIN equ 0x45CD
MEM_FAT_OF0_ATTRIBUTE equ 0x4633
MEM_FAT_OF0_CCLUST equ 0x4635
MEM_FAT_OF0_DATREM equ 0x463F
MEM_FAT_OF0_DATSEC equ 0x463B
MEM_FAT_OF0_FATSEC equ 0x4637
MEM_FAT_RESERVED equ 0x45BA
MEM_FAT_ROOTSTART equ 0x45C9
MEM_FAT_SECTORS equ 0x45BD
MEM_FAT_TMPFNAME equ 0x45D3
MEM_FAT_TMPPOINTER equ 0x45C1
MEM_IDE_BUFFER equ 0x43BA
MEM_IDE_DEVICE equ 0x42CF
MEM_IDE_DEV_TABLE equ 0x42D9
MEM_IDE_FSBUFFER equ 0x45BA
MEM_IDE_PARTITION equ 0x42D1
MEM_IDE_POINTER equ 0x42D5
MEM_IDE_SELECTED equ 0x4319
MEM_IDE_STATUS equ 0x42D0
MEM_IDE_STRING_0 equ 0x431A
MEM_IDE_STRING_1 equ 0x4342
MEM_IDE_STRING_2 equ 0x436A
MEM_IDE_STRING_3 equ 0x4392
MSG_CLEAR equ 0x1D2
NOT_IMPLEMENTED equ 0x1B55
OP_CALL equ 0x1BB7
OP_CD equ 0x1F87
OP_CLR equ 0x1D4B
OP_DASM equ 0x1C38
OP_DIR equ 0x1F83
OP_DUMP equ 0x1BD7
OP_EXEC equ 0x1B9E
OP_FSEXEC equ 0x1FA4
OP_IIC_IN equ 0x1CFF
OP_IIC_OUT equ 0x1C9F
OP_IO_IN equ 0x1C68
OP_IO_OUT equ 0x1C7E
OP_LSDSK equ 0x1F60
OP_RTIME equ 0x1D4F
OP_SELDSK equ 0x1F64
OP_SET equ 0x1C07
OP_STIME equ 0x1EE7
POST_CHECK_APU equ 0x1FDD
POST_CHECK_IDE_30 equ 0x2008
POST_CHECK_IDE_40 equ 0x201B
POST_CHECK_PIO equ 0x1FB8
POST_START equ 0x1FA8
POST_TEST_RTC equ 0x2035
PRG_RAM_START equ 0x4110
PRG_RAM_TOP equ 0xFF00
PRINTINLINE equ 0x1EC
PROG_MEM_START equ 0x4000
PROG_ROM_START equ 0x100
RST_00 equ 0x00
RST_08 equ 0x08
RST_10 equ 0x10
RST_18 equ 0x18
STACK_RAM_TOP equ 0xFFFF
START_ADDR equ 0x8000
START_ROM equ 0x00
STRCONV_BYTES_TO_HEX equ 0x288
STRCONV_BYTES_TO_HEX_1 equ 0x297
STRCONV_BYTES_TO_HEX_2 equ 0x2A1
STR_Banner_Start equ 0x27E9
STR_PD_HEADER equ 0x19C8
STR_keyboard_init_err equ 0x8123
STR_keyboard_init_failed equ 0x8147
STR_keyboard_init_missing equ 0x8169
STR_keyboard_init_okay equ 0x8108
SYS_BUF_START equ 0x4010
SYS_RAM_START equ 0x4000
VAR_CONSOLE_BAUD equ 0x18
VAR_CONSOLE_CONF equ 0x0F
VDP_MEM equ 0x80
VDP_REG equ 0x81
_COMMAND_PROCESS_FOUND equ 0x1B54
_OP_CALL equ 0x1BD6
_OP_IIC_ACK_ERR equ 0x1CE4
_OP_IIC_ACK_ERR_str equ 0x1CEB
_OP_IIC_IN_LOOP equ 0x1D31
_OP_IIC_IN_LOOP_TEXT equ 0x1D3E
_OP_IIC_OUT_LOOP equ 0x1CB5
_OP_IIC_OUT_SEND equ 0x1CD1
_OP_RTIME_NN equ 0x1D52
_OP_RTIME_RD_CMD equ 0x1E0A
_OP_SELDSK_INVALID equ 0x1F73
_OP_SELDSK_INVALID_STR equ 0x1F8B
_OP_SET_LOOP equ 0x1C1F
_OP_STIME_INVALID equ 0x1EAD
_OP_STIME_PROMPT equ 0x1EC4
_OP_STIME_PROMPT_ERR equ 0x1EDC
_OP_STIME_STR_DAY equ 0x1E0B
_OP_STIME_STR_HOUR equ 0x1E5C
_OP_STIME_STR_MIN equ 0x1E77
_OP_STIME_STR_MON equ 0x1E26
_OP_STIME_STR_SEC equ 0x1E92
_OP_STIME_STR_YEAR equ 0x1E41
_POST_CHECK_APU_FAILED equ 0x1FFC
_POST_CHECK_IDE_FAILED equ 0x202E
_POST_CHECK_PIO_FAILED equ 0x1FD1
_POST_TEST_RTC_INVALID equ 0x206F
_POST_TEST_RTC_NOTFOUND equ 0x2068
_STR_NOT_FOUND equ 0x1B77
_STR_NOT_IMPLEMENTED equ 0x1B63
_STR_SYNTAX equ 0x1B8B
_beep_pause_l1 equ 0xE1F
_compare_filename_loop equ 0x24AA
_compare_filename_nomatch equ 0x24B8
_eof equ 0x818F
_fat_cd_navigate equ 0x265F
_fat_cd_navigate_end equ 0x26A5
_fat_cd_navigate_errfile equ 0x26CD
_fat_cd_navigate_errfile_str equ 0x26FF
_fat_cd_navigate_error equ 0x26B7
_fat_cd_navigate_error_str equ 0x26D5
_fat_cd_navigate_findsec equ 0x2664
_fat_cd_navigate_findsec_skipslash equ 0x2690
_fat_cd_navigate_goback_fl equ 0x261B
_fat_cd_navigate_inerror equ 0x26C5
_fat_cd_navigate_inerrorS equ 0x26BF
_fat_cd_navigate_inerrore equ 0x26C6
_fat_cd_navigate_inputerr_str equ 0x26EC
_fat_cd_navigate_l2 equ 0x2696
_fat_exec_notexec equ 0x27C5
_fat_exec_notfound equ 0x27AC
_fat_exec_read_done equ 0x2794
_fat_exec_readloop1 equ 0x2776
_fat_get_root_table_invalid equ 0x229A
_fat_getfatsec_notroot equ 0x22D9
_fat_increment_32 equ 0x2430
_fat_lfs_loop equ 0x23A6
_fat_lfs_loop_compare_end equ 0x23E2
_fat_lfs_loop_compare_match equ 0x23E6
_fat_lfs_loop_compare_next_sector equ 0x23B8
_fat_math_add32 equ 0x2444
_fat_math_mul32 equ 0x2475
_fat_math_mul32_l equ 0x247C
_fat_math_mul32_noadd equ 0x2489
_fat_math_sector_add_16 equ 0x241C
_fat_print_directory_dir equ 0x259A
_fat_print_directory_loop equ 0x252D
_fat_print_directory_loop_break equ 0x25F9
_fat_print_directory_loop_file equ 0x2549
_fat_print_directory_loop_next equ 0x25C5
_fat_print_directory_loop_next_sector equ 0x25D0
_format_filename_fat16_clean equ 0x24C1
_format_filename_fat16_loop equ 0x24C8
_format_filename_fat16_loop_copy equ 0x24DB
_format_filename_fat16_loop_skip_8 equ 0x24D2
_ide_readsector_512_floop equ 0xE7B
_ideif_drv_sel_fail equ 0x15F0
_ideif_drv_sel_fstr0 equ 0x16AD
_ideif_drv_sel_pstr equ 0x16A4
_ideif_drv_sel_sstr0 equ 0x16BB
_ideif_drv_sel_syn equ 0x16C8
_ideif_init_drive_charloop equ 0x14B7
_ideif_init_drive_found equ 0x1499
_ideif_init_drive_loop equ 0x1481
_ideif_init_drive_nodrv equ 0x1494
_ideif_init_drive_prt_fnd equ 0x1515
_ideif_init_drive_prt_l1 equ 0x1503
_ideif_init_drive_prt_ln equ 0x150D
_ideif_prnt_devtable_hdr equ 0x1630
_ideif_prnt_devtable_l1 equ 0x1391
_ideif_prnt_devtable_l1_e2 equ 0x1457
_ideif_prnt_devtable_l1_es equ 0x13D6
_ideif_prnt_devtable_l1_ms equ 0x1454
_ideif_prnt_devtable_l1_nxt equ 0x139E
_ideif_prnt_devtable_l1_s00 equ 0x13C4
_ideif_prnt_devtable_l1_s01 equ 0x13C9
_ideif_prnt_devtable_l1_s02 equ 0x13CE
_ideif_prnt_devtable_l1_sFF equ 0x13D3
_ideif_prnt_devtable_l1_sel equ 0x139C
_ideif_prnt_devtable_master equ 0x1694
_ideif_prnt_devtable_s00 equ 0x1668
_ideif_prnt_devtable_s01 equ 0x1673
_ideif_prnt_devtable_s02 equ 0x167E
_ideif_prnt_devtable_sFF equ 0x1689
_ideif_prnt_devtable_slave equ 0x169C
_int_invalid_int equ 0x185A
_intctrl_init_fill_loop equ 0x183B
_isr_pio equ 0x184E
_isr_pio_test equ 0x8181
_keyb_cmd_rd_l1 equ 0x80E0
_keyb_enable_int_flush_buffer equ 0x80CF
_keyb_wr_wait_ack_l1 equ 0x80FD
_keyboard_init_dev_missing equ 0x80AA
_keyboard_init_failed equ 0x80A3
_keyboard_init_flush_buffer equ 0x8065
_keyboard_init_okay equ 0x80B1
_read_bcd_invalid equ 0x165
_shift4 equ 0x1F5B
_str_invalid_interrupt equ 0x1864
_str_pio_interrupt equ 0x189B
beep equ 0xE04
beep_loop equ 0xE07
beep_pause equ 0xE1E
com_header equ 0x8000
com_prg equ 0x8040
compare_filename equ 0x24A6
con_rb_init equ 0x18E
con_rb_read equ 0x199
con_rb_read_empty equ 0x1B6
con_rb_write equ 0x1BF
consio_init_a equ 0x18CE
consio_init_a_int equ 0x1906
consio_init_a_sio equ 0x18D5
consio_init_ctc_a equ 0x191D
consio_isr equ 0x1960
consio_rx_a equ 0x1933
consio_rx_a_sts equ 0x1956
consio_rx_rts_a_off equ 0x194D
consio_rx_rts_a_on equ 0x1944
consio_tx_a equ 0x1926
consio_tx_a_waitout equ 0x1928
dasm_00 equ 0xA09
dasm_01 equ 0xCF5
dasm_02 equ 0xA8F
dasm_03 equ 0xCC7
dasm_08 equ 0xB0C
dasm_09 equ 0xC9A
dasm_0A equ 0xA71
dasm_0B equ 0xCDE
dasm_10 equ 0xA51
dasm_12 equ 0xA9A
dasm_18 equ 0xA14
dasm_1A equ 0xA7B
dasm_20 equ 0xA2E
dasm_22 equ 0xD3B
dasm_27 equ 0xAD4
dasm_28 equ 0xA27
dasm_2A equ 0xD0C
dasm_2F equ 0xAD8
dasm_30 equ 0xA1F
dasm_32 equ 0xAA5
dasm_37 equ 0xAE4
dasm_38 equ 0xA18
dasm_3A equ 0xA85
dasm_3F equ 0xAE0
dasm_76 equ 0xAE8
dasm_80C6 equ 0xB65
dasm_BE equ 0xB02
dasm_C3 equ 0xA0D
dasm_C88E equ 0xB8B
dasm_C9 equ 0xA5D
dasm_CD equ 0xA57
dasm_D9 equ 0xB19
dasm_DD equ 0xA3F
dasm_DD_01 equ 0xCFC
dasm_DD_09 equ 0xCB5
dasm_DD_22 equ 0xD51
dasm_DD_23 equ 0xCCC
dasm_DD_2A equ 0xD23
dasm_DD_2B equ 0xCE3
dasm_DD_34 equ 0xC65
dasm_DD_35 equ 0xC82
dasm_DD_86 equ 0xB6D
dasm_DD_8E equ 0xB93
dasm_DD_96 equ 0xBB6
dasm_DD_9E equ 0xBD6
dasm_DD_A6 equ 0xBF7
dasm_DD_AE equ 0xC2E
dasm_DD_B6 equ 0xC13
dasm_DD_BE equ 0xC4A
dasm_DD_E1 equ 0xDA3
dasm_DD_E3 equ 0xB29
dasm_DD_E5 equ 0xD8D
dasm_DD_F9 equ 0xD73
dasm_E1 equ 0xD9D
dasm_E3 equ 0xB1D
dasm_E5 equ 0xD87
dasm_E9 equ 0xA36
dasm_ED_42 equ 0xCAC
dasm_ED_43 equ 0xD47
dasm_ED_44 equ 0xADC
dasm_ED_45 equ 0xA67
dasm_ED_46 equ 0xAF3
dasm_ED_4A equ 0xCA3
dasm_ED_4B equ 0xD18
dasm_ED_4D equ 0xA62
dasm_ED_56 equ 0xAF8
dasm_ED_5E equ 0xAFD
dasm_ED_A0 equ 0xB41
dasm_ED_A1 equ 0xB53
dasm_ED_A8 equ 0xB4A
dasm_ED_A9 equ 0xB5C
dasm_ED_B0 equ 0xB45
dasm_ED_B1 equ 0xB57
dasm_ED_B8 equ 0xB4E
dasm_ED_B9 equ 0xB60
dasm_F3 equ 0xAED
dasm_F9 equ 0xD69
dasm_FB equ 0xAF0
dasm_FD equ 0xA48
dasm_FD_01 equ 0xD04
dasm_FD_09 equ 0xCBE
dasm_FD_22 equ 0xD5D
dasm_FD_23 equ 0xCD5
dasm_FD_2A equ 0xD2F
dasm_FD_2B equ 0xCEC
dasm_FD_34 equ 0xC71
dasm_FD_35 equ 0xC8E
dasm_FD_86 equ 0xB7C
dasm_FD_8E equ 0xBA2
dasm_FD_96 equ 0xBC2
dasm_FD_9E equ 0xBE4
dasm_FD_A6 equ 0xC03
dasm_FD_AE equ 0xC3A
dasm_FD_B6 equ 0xC1E
dasm_FD_BE equ 0xC55
dasm_FD_E1 equ 0xDAB
dasm_FD_E3 equ 0xB35
dasm_FD_E5 equ 0xD95
dasm_FD_F9 equ 0xD7D
dasm_FF equ 0xA6C
dasm_UU equ 0xDB3
dasm_UW equ 0xDB7
dasm__AND equ 0xBF2
dasm__CP equ 0xC46
dasm__DEC equ 0xC7D
dasm__ED_47 equ 0xAC4
dasm__ED_4F equ 0xACC
dasm__ED_57 equ 0xAB4
dasm__ED_5F equ 0xABC
dasm__INC equ 0xC60
dasm__LD equ 0xAB0
dasm__OR equ 0xC0F
dasm__SBC equ 0xBCE
dasm__SUB equ 0xBB1
dasm__XOR equ 0xC29
dasm_opcode_table equ 0x5B1
dasm_print16hex_addr equ 0x3DE
dasm_print8hex equ 0x3F6
dasm_printFlags_table equ 0xDBC
dasm_printRegister8_table equ 0xDCC
dasm_printRegister8_table_HL equ 0xDEC
dasm_printRegisterIX_table equ 0xDD4
dasm_printRegisterIY_table equ 0xDDC
dasm_printRegisterSP_table equ 0xDE4
disassemble equ 0x2A2
disassemble_continue equ 0x388
disassemble_err equ 0x378
disassemble_next equ 0x2A6
disassemble_print_opcode_params_end equ 0x375
disassemble_print_opcode_params_loop equ 0x321
disassemble_print_opcode_raw equ 0x2E3
disassemble_print_opcode_raw_fill equ 0x2F7
disassemble_table_first_match equ 0x3BA
disassemble_table_found equ 0x3D4
disassemble_table_notfound equ 0x3D8
disassemble_table_seek equ 0x396
disassemble_table_seek_loop equ 0x39A
dump_pretty equ 0x196D
dump_pretty_ascii equ 0x1997
dump_pretty_ascii_cont equ 0x19B5
dump_pretty_ascii_loop equ 0x199F
dump_pretty_ascii_none equ 0x19B0
dump_pretty_col equ 0x198A
dump_pretty_end equ 0x19C7
dump_pretty_nextrow equ 0x19BB
dump_pretty_row equ 0x1975
endPrint equ 0x1FA
fat_cd_single equ 0x25FB
fat_copy_lba_pointer equ 0x249D
fat_exec equ 0x2716
fat_get_root_table equ 0x21CD
fat_getfatsec equ 0x22C2
fat_openfile equ 0x2377
fat_openfile_noprepare equ 0x237F
fat_print_directory equ 0x24E2
fat_readfilesec equ 0x234A
fat_reset_pointer equ 0x248E
format_filename_fat16 equ 0x24BC
ide_printerror equ 0xEB2
ide_readsector_512_fast equ 0xE67
ide_readsector_timeout equ 0xE9C
ide_regread_8 equ 0xE51
ide_regwrite_8 equ 0xE37
ide_reset equ 0xE2B
ide_writesector_256 equ 0xEB1
ideif_drv_sel equ 0x15B8
ideif_get_drv_pointer equ 0x1558
ideif_init_all equ 0x156C
ideif_init_devtable equ 0x1365
ideif_init_drive equ 0x1478
ideif_prnt_devtable equ 0x1383
iic_init equ 0x173A
iic_read_ack equ 0x1781
iic_receive_buffer equ 0x170B
iic_receive_buffer_done equ 0x172E
iic_receive_buffer_err equ 0x1734
iic_receive_buffer_loop equ 0x171C
iic_receive_byte equ 0x1807
iic_receive_byte_loop equ 0x1814
iic_send_ack equ 0x17A7
iic_send_buffer equ 0x16E1
iic_send_buffer_done equ 0x16FF
iic_send_buffer_err equ 0x1705
iic_send_buffer_loop equ 0x16F1
iic_send_byte equ 0x17E1
iic_send_byte_loop equ 0x17ED
iic_send_ebit equ 0x1760
iic_send_nack equ 0x17C4
iic_send_sbit equ 0x1747
initctrl_int_abandon equ 0x184E
initctrl_int_register equ 0x184E
intctrl_init equ 0x182E
interrupt_vectors equ 0x4000
keyb_cmd_enable equ 0x80B8
keyb_cmd_rd equ 0x80DE
keyb_cmd_wr equ 0x80D8
keyb_enable_int equ 0x80C8
keyb_wait_ibf_empty equ 0x80EB
keyb_wait_obf equ 0x80F2
keyb_wr_wait_ack equ 0x80F8
keyboard_init equ 0x805D
mon_var_template equ 0x44
mon_var_template_end equ 0x613
mon_var_template_sof equ 0x444
nxtILC equ 0x1EF
param_01 equ 0x404
param_02 equ 0x42B
param_03 equ 0x448
param_03_done equ 0x480
param_03_neg equ 0x469
param_04 equ 0x484
param_04_i equ 0x494
param_05 equ 0x49A
param_06 equ 0x4A7
param_07 equ 0x4C1
param_08 equ 0x4CE
param_09 equ 0x4E3
param_09_0A equ 0x4E9
param_0A equ 0x4DA
param_10 equ 0x4F8
param_11 equ 0x508
param_11_12 equ 0x517
param_11_12_all equ 0x537
param_11_12_def equ 0x52A
param_11_12_ix equ 0x52F
param_11_12_iy equ 0x534
param_12 equ 0x510
param_13 equ 0x548
param_80 equ 0x567
param_80_seek equ 0x56E
param_81 equ 0x55E
param_comma equ 0x5A2
param_printRegister equ 0x57D
param_printRegisterA equ 0x59B
param_printRegisterHL equ 0x593
print_16_hex equ 0x181
print_32_hex equ 0x168
print_a_hex equ 0x122
print_bcd equ 0x134
print_char equ 0xF6
print_clear equ 0x105
print_newLine equ 0x10C
print_reg equ 0x1FF
print_str equ 0xFC
print_str_fixed equ 0x1A07
print_wait_out equ 0x117
read_bcd equ 0x14F
read_char equ 0x14C
read_char_raw equ 0x13A
read_lba_sector equ 0x157F
str_dev_done equ 0x1628
str_dev_waitready equ 0x1610
str_error_start equ 0xEE7
str_error_start1 equ 0xF04
str_error_start2 equ 0xF0D
str_error_time equ 0xF16
str_post_apu equ 0x20C7
str_post_ide_30 equ 0x2076
str_post_ide_40 equ 0x2091
str_post_nd equ 0x20FD
str_post_ok equ 0x2135
str_post_pio equ 0x20AC
str_post_rtc equ 0x20E2
str_post_rtc_iv equ 0x210B
var_apu_present equ 0x420E
var_buffer_conin_data equ 0x4100
var_buffer_conin_in equ 0x4200
var_buffer_conin_out equ 0x4201
var_buffer_conin_sts equ 0x4202
var_buffer_conout equ 0x4203
var_buffer_len equ 0x4204
var_bytes_count equ 0x411A
var_curserchar equ 0x420A
var_curserlastaddr equ 0x420B
var_curseron equ 0x4209
var_curserstate equ 0x4208
var_curserx equ 0x4206
var_cursery equ 0x4207
var_dir equ 0x422F
var_idebuffer equ 0x42CF
var_input equ 0x427F
var_last_char equ 0x4205
var_opcode equ 0x4114
var_opcode_length equ 0x4116
var_opcode_pcount equ 0x4119
var_opcode_start equ 0x4110
var_opcode_string equ 0x4117
var_opcode_table equ 0x4112
var_opcode_x equ 0x4115
var_pio_present equ 0x420D
var_ps2mem equ 0x421F
var_scratch equ 0x420F

View File

@@ -0,0 +1,293 @@
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
; Program start
VDP_REGISTER .EQU 0xE1
VDP_RAM .EQU 0xE0
VDPR_MODE0 .EQU 0
VDPR_MODE1 .EQU 1
VDPR_MODE2 .EQU 8
VDPR_MODE3 .EQU 9
VDPR_COLOR .EQU 7
VDPR_PATNMEBASE .EQU 2
VDPR_PATGENBASE .EQU 4
VDPR_COLTBBASE0 .EQU 3
VDPR_COLTBBASE1 .EQU 10
TmsTransparent: equ 0
TmsBlack: equ 1
TmsMediumGreen: equ 2
TmsLightGreen: equ 3
TmsDarkBlue: equ 4
TmsLightBlue: equ 5
TmsDarkRed: equ 6
TmsCyan: equ 7
TmsMediumRed: equ 8
TmsLightRed: equ 9
TmsDarkYellow: equ 0ah
TmsLightYellow: equ 0bh
TmsDarkGreen: equ 0ch
TmsMagenta: equ 0dh
TmsGray: equ 0eh
TmsWhite: equ 0fh
TMS_R8_MS equ 128 ;Mouse: when set to 1, sets the color bus into input mode and enables mouse. If set to 0, sets color bus into output mode and disables mouse
TMS_R8_LP equ 64 ;Light pen: when set to 1, enables light pen
TMS_R8_TP equ 32 ;Sets the color of code 0 to the color of the palette
TMS_R8_CB equ 16 ;Color bus: when set to 1, sets color bus into input mode. If set to 0, sets color bus into output mode
TMS_R8_VR equ 8 ;If set to 1, VRAM is 64Kx1Bit or 64Kx4bits. If set to 0, VRAM is 16Kx1Bit or 16Kx4Bits
TMS_R8_SPD equ 2 ;if set to 1, sprites are not displayed and related VRAM reads are not performed
TMS_R8_BW equ 1 ;if set to 1, output is grayscale in 32 tones
call tms_init_text2
ret
; Set a VDP Register (dircet access)
; a = data
; e = register
tms_setregister:
out (VDP_REGISTER), a
ld a,e
or 80h
out (VDP_REGISTER), a
ret
; ahl contains pointer to VRAM address
tms_mem_setpointer_rd:
rlc h
rla
rlc h
rla
srl h
srl h
out (VDP_REGISTER),a
ld a,14 + 128
out (VDP_REGISTER),a
ld a,l
out (VDP_REGISTER),a
ld a,h
out (VDP_REGISTER),a
ret
; ahl contains pointer to VRAM address
tms_mem_setpointer_wr:
rlc h
rla
rlc h
rla
srl h
srl h
out (VDP_REGISTER),a
ld a,14 + 128
out (VDP_REGISTER),a
ld a,l
out (VDP_REGISTER),a
ld a,h
or 64
out (VDP_REGISTER),a
ret
;b back, c: front
tms_set_color
ld a,c ;load front color to a
rlca
rlca
rlca
rlca
or b ;combine back color
ld e, VDPR_COLOR
jp tms_setregister
tms_init_text2:
; init vdp (80col text)
ld e, VDPR_MODE0
ld a, 00000100b ;TEXT2
call tms_setregister
ld e, VDPR_MODE1 ;blank screen wit 64K enabled
ld a, 00001000b
call tms_setregister
ld e, VDPR_MODE2
ld a, TMS_R8_SPD
call tms_setregister
ld e, VDPR_MODE3
ld a, 00000010b
call tms_setregister
; set memory layout
; set pattern name table
ld e, VDPR_PATNMEBASE
ld a, 00000011b
call tms_setregister
ld e, VDPR_PATGENBASE
ld a, 00000010b
call tms_setregister
ld e, VDPR_COLTBBASE0
ld a, 00101111b
call tms_setregister
ld e, VDPR_COLTBBASE1
ld a, 00000000b
call tms_setregister
;enable cpu wait
ld e,25
ld a,4
call tms_setregister
;setup cursor:
ld e, 13 ; set blink rate
ld a, 0x22
call tms_setregister
ld e, 12 ; set blink color
ld a, 0xFF
call tms_setregister
ld de, 0x0000
ld bc, 0x2000
ld a, 0
call tms_fill_data
;load font
ld hl, [TmsFont]
ld bc, 256*8
ld de, 0x1000
call tms_load_data
ld e, VDPR_MODE1 ;enable screen wit 64K enabled
ld a, 01010000b
call tms_setregister
;WRITE CHAR
ld hl, 0
ld a,0
call tms_mem_setpointer_wr
ld a,'R'
call VTERM_INIT
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
call VTERM_CURSOR_ON
ld b, TmsBlack
ld c, TmsWhite
call tms_set_color
TEST_ECHO:
call read_char
jp z, TEST_ECHO
call VTERM_PRINT
jr TEST_ECHO
ret
STR_Banner_Start_Test:
db 10,13,"Z8C Monitor V2.1 by Dennis Gunia (2022-2024)",10,13,"TEST",10,13,"NEW LINE",10,13,"LOLLOLLLOLOLOLOLOL",0
;hl location in sysram
;de location in vram (destination)
;bc amount of bytes (byte counter)
tms_load_data:
;setup address
push hl
ex de,hl
ld a,0
call tms_mem_setpointer_wr
pop hl
;load data
tms_load_data_loop:
ld a,(hl) ;load byte from system
inc hl
out (VDP_RAM),a
dec bc ;decrement counter
ld a,b ;check if zero
or c
jr nz, tms_load_data_loop ;if not loop
ret ;else exit
tms_read_statusreg:
out (VDP_RAM),a
ld a,15 + 128
out (VDP_RAM),a
in a,(VDP_RAM)
ex af,af'
xor a ; ld a,0
out (VDP_RAM),a
ld a,15 + 128
out (VDP_RAM),a
ex af,af'
ret
;a bytes to fill
;de location in vram (destination)
;bc amount of bytes (byte counter)
tms_fill_data:
;setup address
push af
ex de,hl
call tms_mem_setpointer_wr
tms_fill_data_loop:
pop af
out (VDP_RAM),a
push af
dec bc ;decrement counter
ld a,b ;check if zero
or c
jr nz, tms_fill_data_loop ;if not loop
pop af
ret ;else exit
.include "font80.s"
.include "vdpterm.s"
;
;hl location in sysmem
;de location in vram (destination)
;bc amount of bytes (byte counter)
tms_read_data:
push hl
push bc
ex de,hl
call tms_mem_setpointer_rd
pop bc
pop hl
tms_read_data_loop:
in a,(VDP_RAM)
ld (hl),a
inc hl
dec bc ;decrement counter
ld a,b ;check if zero
or c
jr nz, tms_read_data_loop ;if not loop
ret ;else exit
_eof:

View File

@@ -0,0 +1 @@
../../../monitor_v2/zout/symbols.s

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
INT_VEC_TABLE .equ [interrupt_vectors]
INT_PIO_ADDRD .equ CS_PIO_AD
INT_PIO_ADDRC .equ CS_PIO_AC
; jumps to isr. MUST be exited with RETI opcode!
_isr_pio_test:
di
ld hl, [_str_pio_interrupt]
call print_str
;get int from pio
in a,(INT_PIO_ADDRD)
call print_a_hex
reti

View File

@@ -0,0 +1,254 @@
;; VDP Terminal Driver
__VDPBUFFER_COUNTER equ var_idebuffer + 767
__VDPBUFFER_CURSORADDR equ var_idebuffer + 768
__VDPBUFFER_LINE equ var_idebuffer + 770
__VTERM_MAX_LINES equ 23
__VTERM_MAX_CPL equ 81
VTERM_INIT:
; init variables
xor a
ld (var_curserx),a
ld (var_cursery),a
ld (var_curseron),a
ld hl, 0x0A00
ld (__VDPBUFFER_CURSORADDR),hl
call _VTERM_SET_CURSORADDR
ret
; --- Console enable cursor ---
; destroy a
VTERM_CURSOR_ON:
push hl
push bc
push de
ld a,1
ld (var_curseron),a
call _VTERM_MOVE_CURSOR
pop de
pop bc
pop hl
ret
; --- Console disable cursor ---
; destroy a
VTERM_CURSOR_OFF:
push hl
push bc
xor a
ld (var_curseron),a
ld hl,(__VDPBUFFER_CURSORADDR)
call VDP_RAMADDR_WR
xor a
out (VDP_RAM),a ;clear old cursor
call _VTERM_SET_CURSORADDR
pop bc
pop hl
ret
; --- Console print string (null terminated) ---
; inputs: hl (pointer to string)
; modify hl
; destroy a
VTERM_PRINT_STR:
ld a,(hl)
or a
ret z
call VTERM_PRINT
inc hl
jr VTERM_PRINT_STR
; --- Console print char ---
; inputs: a (ascii char)
VTERM_PRINT:
push af
push bc
push de
push hl
push af
call print_a_hex
pop af
cp 0x08
jp z,_VTERM_PRINT_BACKSPC
cp 13
jp z, _VTERM_PRINT_CR
cp 10
jp z, _VTERM_PRINT_LF
; else print a
call _VTERM_CHAROUT
_VTERM_PRINT_END:
call _VTERM_MOVE_CURSOR
pop hl
pop de
pop bc
pop af
ret
_VTERM_PRINT_BACKSPC:
call _VTERM_CURSOR_BACK
ld a,' '
out (VDP_RAM),a
jp _VTERM_PRINT_END
_VTERM_PRINT_CR:
call _VTERM_CURSOR_START
jp _VTERM_PRINT_END
_VTERM_PRINT_LF:
call _VTERM_CURSOR_NEWLINE
jp _VTERM_PRINT_END
; only called by VTERM_PRINT
; destroys af,bc,de,hl
_VTERM_CHAROUT:
push af ;store char
ld a,(var_curserx) ;test for line wrap
inc a
cp __VTERM_MAX_CPL +1
jr nz, __VTERM_CHAROUT_NOBREAK ; if linewrap:
call _VTERM_CURSOR_START ; do new line
call _VTERM_CURSOR_NEWLINE
__VTERM_CHAROUT_NOBREAK: ; if not linewrap
ld a,(var_curserx) ; move curser by one
inc a
ld (var_curserx),a
pop af
out (VDP_RAM),a
ret
; destroys af,bc,de,hl
_VTERM_CURSOR_BACK:
ld a,(var_curserx)
or a
ret z;if line wrap, ignore
dec a
ld (var_curserx),a
jp _VTERM_MOVE_CURSOR
; --- Move cursor to start of line ---
; destroys af,bc,de,hl
_VTERM_CURSOR_START:
xor a
ld (var_curserx),a
jp _VTERM_MOVE_CURSOR
; --- Move cursor to next line ---
; destroys af,bc,de,hl
_VTERM_CURSOR_NEWLINE:
ld a,(var_cursery)
cp __VTERM_MAX_LINES
jp z, _VTERM_SCROLL
inc a
ld (var_cursery),a
jp _VTERM_MOVE_CURSOR
; --- Calculate 16bit VRAM adress of current char ---
; destroy AF,DE
; outputs HL
_VTERM_CALC_CURSORADDR:
ld d,0
ld a,(var_cursery)
ld e,a
ld hl,0
add hl, de ; Y x 1
add hl, hl ; Y x 2
add hl, hl ; Y x 4
add hl, de ; Y x 5
add hl, hl ; Y x 10
add hl, hl ; Y x 20
add hl, hl ; Y x 40
add hl, hl ; Y x 80
ld a,(var_curserx)
ld e,a
add hl, de ; add X for final address
ret
; destroy AF,DE,HL
_VTERM_SET_CURSORADDR:
call _VTERM_CALC_CURSORADDR
jp VDP_RAMADDR_WR
; destroy AF,DE,HL
_VTERM_SET_CURSORADDR_RD:
call _VTERM_CALC_CURSORADDR
jp VDP_RAMADDR_RD
; destroys af,bc,de,hl
_VTERM_MOVE_CURSOR:
ld a,(var_curseron)
or a
jp z, _VTERM_SET_CURSORADDR ;if cursor disable, only set new memory location
;if cursor is enabled
ld hl,(__VDPBUFFER_CURSORADDR)
call VDP_RAMADDR_WR
xor a
out (VDP_RAM),a ;clear old cursor
; calulate new position
call _VTERM_CALC_CURSORADDR
ld a,l ;load lower byte
and 0x07 ;mask lower 3 bits
ld b,a ;save lower 3 bits
srl h
rr l
srl h
rr l
srl h
rr l
ld de,0x0A00
add hl,de
ld (__VDPBUFFER_CURSORADDR), hl
call VDP_RAMADDR_WR
ld a,128
_VTERM_MOVE_CURSOR_LOOP:
rrca
djnz _VTERM_MOVE_CURSOR_LOOP
out (VDP_RAM),a
jp _VTERM_SET_CURSORADDR
; --- Memory Scroll ---
_VTERM_SCROLL:
;COPY / Scroll up using VDP commands
ld e,15 ;select status register
ld a,2
call VDP_SETREG
in a,(VDP_REGISTER)
and 0x40 ;Vertical retrace flag
jr z, _VTERM_SCROLL; if not loop
; else setup address
xor a
ld (var_curserx),a
ld (__VDPBUFFER_COUNTER),a
_VTERM_SCROLL_LINE:
ld a,(__VDPBUFFER_COUNTER) ;set next line
inc a
ld (var_cursery),a
call _VTERM_SET_CURSORADDR_RD
ld b,__VTERM_MAX_CPL
ld hl,__VDPBUFFER_LINE ;buffer location
ld c, VDP_RAM
_VTERM_SCROLL_LINE_L1:
ini ;load 80 bytes to ram
jr nz, _VTERM_SCROLL_LINE_L1
;setup target row
ld a,(__VDPBUFFER_COUNTER) ;set next line
ld (var_cursery),a
call _VTERM_SET_CURSORADDR
ld b,__VTERM_MAX_CPL
ld hl,__VDPBUFFER_LINE ;buffer location
_VTERM_SCROLL_LINE_L2:
outi ;store to vdp ram
jr nz, _VTERM_SCROLL_LINE_L2
;done with one line
ld a,(__VDPBUFFER_COUNTER)
inc a
ld (__VDPBUFFER_COUNTER),a
cp __VTERM_MAX_LINES
jp nz, _VTERM_SCROLL_LINE
ld (var_cursery),a
call _VTERM_SET_CURSORADDR
;fill
ld b,__VTERM_MAX_CPL
_VTERM_SCROLL_LINE_FILL:
xor a
out (VDP_RAM),a
djnz _VTERM_SCROLL_LINE_FILL
jp _VTERM_SET_CURSORADDR

View File

@@ -0,0 +1,151 @@
;----------------------------------------------------------------
;Keyboard interface driver for Z8C
;Controller used: vt82c42
;Datasheet: http://www.s100computers.com/My%20System%20Pages/MSDOS%20Board/vt82c42%20PC%20Keyboard%20conrtroller.pdf
;by Dennis Gunia (04/2022)
;----------------------------------------------------------------
;================================================================
; I/O registers
;================================================================
CS_VT82C42_DATA .EQU 0xF0
CS_VT82C42_CTRL .EQU 0xF1
;================================================================
; I/O access functions
;================================================================
keyboard_init:
ld a, 0xA7 ;Disable Mouse
out (CS_VT82C42_CTRL), A
ld a, 0xAD ;Disable Keyboard
out (CS_VT82C42_CTRL), A
_keyboard_init_flush_buffer:
in a,(CS_VT82C42_DATA) ;Read buffer
in a,(CS_VT82C42_CTRL) ;Read status byte
bit 0,a ;Test if buffer is empty
jr nz, _keyboard_init_flush_buffer
;buffer is now flushed. Now set the Controller Configuration Byte
ld a, 0x60 ;next byte is command byte register write
ld b, 11111100b ;Disable bits 0,1,6 (disable IRQ and Translation)
call keyb_cmd_wr
;Perform Controller Self Test
ld a, 0xAA
call keyb_cmd_rd
cp 0x55
jr nz, _keyboard_init_failed
;Perform Interface Tests
ld a, 0xAB
call keyb_cmd_rd
or a
jr nz, _keyboard_init_failed
;Enable Devices
ld a,0xAE
out (CS_VT82C42_CTRL), A
call keyb_wait_ibf_empty
;Test if device is present Devices
ld a,0xEE
out (CS_VT82C42_DATA), A ;Send echo to keboard (0xEE command)
call keyb_wait_ibf_empty
call keyb_wait_obf
in a,(CS_VT82C42_DATA)
cp a, 0xEE
jr z, _keyboard_init_okay ; 0xFC -> Success. Init done!
;Else device error
ld hl, [STR_keyboard_init_failed]
call print_str
ret
_keyboard_init_failed:
LD HL, [STR_keyboard_init_err]
CALL print_str
RET
_keyboard_init_dev_missing:
LD HL, [STR_keyboard_init_missing]
CALL print_str
RET
_keyboard_init_okay:
LD HL, [STR_keyboard_init_okay]
CALL print_str
RET
keyb_cmd_enable:
ld a, 0xF4
call keyb_wr_wait_ack
ld a, 0xED
call keyb_wr_wait_ack
ld a, 0x02
call keyb_wr_wait_ack
ret
keyb_enable_int:
ld a, 0x60 ;next byte is command byte register write
ld b, 00000001b ;Disable bits 0,1,6 (disable IRQ and Translation)
call keyb_cmd_wr
_keyb_enable_int_flush_buffer:
in a,(CS_VT82C42_DATA) ;Read buffer
in a,(CS_VT82C42_CTRL) ;Read status byte
bit 0,a ;Test if buffer is empty
jr nz, _keyb_enable_int_flush_buffer
ret
; a contains command
; b conatins data
keyb_cmd_wr:
out (CS_VT82C42_CTRL),a ;write command byte
ld a, b
out (CS_VT82C42_DATA),a
ret
; a contains command
; a returns data
keyb_cmd_rd:
out (CS_VT82C42_CTRL),a ;write command byte
_keyb_cmd_rd_l1:
in a, (CS_VT82C42_CTRL) ;read status
call print_a_hex
rra
jr nc, _keyb_cmd_rd_l1 ;wait until OBF is set (data avail)
in a, (CS_VT82C42_DATA)
ret
keyb_wait_ibf_empty:
in a, (CS_VT82C42_CTRL) ;read status
rra
rra
jr c, keyb_wait_ibf_empty ;if IBF, wait
ret
keyb_wait_obf:
in a, (CS_VT82C42_CTRL) ;read status
rra
jr nc, keyb_wait_obf ;if IBF, wait
ret
; a data
; z is 0 if success
keyb_wr_wait_ack:
out (CS_VT82C42_DATA),a ;write command byte
call keyb_wait_obf ;wait until sent
_keyb_wr_wait_ack_l1: ;wait for reponse
in a, (CS_VT82C42_CTRL) ;read status
bit 1,a ;check input buffer full
jr nz, _keyb_wr_wait_ack_l1
in a, (CS_VT82C42_DATA)
cp 0xFA
ret
;Status message strings
STR_keyboard_init_okay:
.BYTE "PS/2 Keyboard initialized.",0
STR_keyboard_init_err:
.BYTE "PS/2 Controller error! System HALT!",0
STR_keyboard_init_failed:
.BYTE "PS/2 Keyboard error! System HALT!",0
STR_keyboard_init_missing:
.BYTE "PS/2 no keyboard found!",0

View File

@@ -0,0 +1,256 @@
;----------------------------------------------------------------
;BIOS Driver for VDP V9958
;by Dennis Gunia (07/2024)
;----------------------------------------------------------------
;================================================================
; I/O registers
;================================================================
VDP_REGISTER .EQU 0xE1
VDP_RAM .EQU 0xE0
;================================================================
; VDP Registers
;================================================================
; registers
VDPR_MODE0 .EQU 0
VDPR_MODE1 .EQU 1
VDPR_MODE2 .EQU 8
VDPR_MODE3 .EQU 9
VDPR_COLOR .EQU 7
VDPR_PATNMEBASE .EQU 2
VDPR_PATGENBASE .EQU 4
VDPR_COLTBBASE0 .EQU 3
VDPR_COLTBBASE1 .EQU 10
; register bits
TMS_R8_MS .EQU 128 ;Mouse: when set to 1, sets the color bus into input mode and enables mouse. If set to 0, sets color bus into output mode and disables mouse
TMS_R8_LP .EQU 64 ;Light pen: when set to 1, enables light pen
TMS_R8_TP .EQU 32 ;Sets the color of code 0 to the color of the palette
TMS_R8_CB .EQU 16 ;Color bus: when set to 1, sets color bus into input mode. If set to 0, sets color bus into output mode
TMS_R8_VR .EQU 8 ;If set to 1, VRAM is 64Kx1Bit or 64Kx4bits. If set to 0, VRAM is 16Kx1Bit or 16Kx4Bits
TMS_R8_SPD .EQU 2 ;if set to 1, sprites are not displayed and related VRAM reads are not performed
TMS_R8_BW .EQU 1 ;if set to 1, output is grayscale in 32 tones
; colors
TmsTransparent .EQU 0
TmsBlack .EQU 1
TmsMediumGreen .EQU 2
TmsLightGreen .EQU 3
TmsDarkBlue .EQU 4
TmsLightBlue .EQU 5
TmsDarkRed .EQU 6
TmsCyan .EQU 7
TmsMediumRed .EQU 8
TmsLightRed .EQU 9
TmsDarkYellow .EQU 0ah
TmsLightYellow .EQU 0bh
TmsDarkGreen .EQU 0ch
TmsMagenta .EQU 0dh
TmsGray .EQU 0eh
TmsWhite .EQU 0fh
;================================================================
; I/O access functions
;================================================================
;------------------------------------------------------------------------------
; set vdp register
;
; inputs: a (value), e (register)
;------------------------------------------------------------------------------
VDP_SETREG:
out (VDP_REGISTER), a
ld a,e
or 80h
out (VDP_REGISTER), a
ret
;------------------------------------------------------------------------------
; read vdp status register
;
; inputs: a (register)
;------------------------------------------------------------------------------
VDP_STS:
out (VDP_RAM),a ;write addr
ld a,15 + 128
out (VDP_RAM),a ;selct reg for read
in a,(VDP_RAM)
ret
;------------------------------------------------------------------------------
; set vdp ram pointer for read
;
; inputs: ahl (address)
;------------------------------------------------------------------------------
VDP_RAMADDR_RD:
rlc h
rla
rlc h
rla
srl h
srl h
out (VDP_REGISTER),a
ld a,14 + 128
out (VDP_REGISTER),a
ld a,l
out (VDP_REGISTER),a
ld a,h
out (VDP_REGISTER),a
ret
;------------------------------------------------------------------------------
; set vdp ram pointer for write
;
; inputs: ahl (address)
;------------------------------------------------------------------------------
VDP_RAMADDR_WR:
rlc h
rla
rlc h
rla
srl h
srl h
out (VDP_REGISTER),a
ld a,14 + 128
out (VDP_REGISTER),a
ld a,l
out (VDP_REGISTER),a
ld a,h
or 64
out (VDP_REGISTER),a
ret
;------------------------------------------------------------------------------
; set vdp console color
;
; inputs: b (back color), c (front color)
; destroys: e, af
;------------------------------------------------------------------------------
VDP_COLOR:
ld a,c ;load front color to a
rlca
rlca
rlca
rlca
or b ;combine back color
ld e, VDPR_COLOR
call VDP_SETREG
; set blink color
ld e, 12 ; set blink color
ld a,b ;load front color to a
rlca
rlca
rlca
rlca
or c ;combine back color
call VDP_SETREG
ret
;------------------------------------------------------------------------------
; copy block of memory to vdp
;
; inputs: hl (source in local ram)
; de (destination in vram)
; bc (byte counter)
; destroys: af
;------------------------------------------------------------------------------
VDP_LOADRAM:
;setup address
push hl
ex de,hl
ld a,0
call VDP_RAMADDR_WR
pop hl
_VDP_LOADRAM_LOOP:
ld a,(hl) ;load byte from system
inc hl
out (VDP_RAM),a
dec bc ;decrement counter
ld a,b ;check if zero
or c
jr nz, _VDP_LOADRAM_LOOP ;if not loop
ret ;else exit
;------------------------------------------------------------------------------
; fill block of memory in vdp
;
; inputs: a (value to write)
; de (destination in vram)
; bc (byte counter)
; destroys: hl
;------------------------------------------------------------------------------
VDP_FILL:
push af
ex de,hl
call VDP_RAMADDR_WR
_VDP_FILL_LOOP:
pop af
out (VDP_RAM),a
push af
dec bc ;decrement counter
ld a,b ;check if zero
or c
jr nz, _VDP_FILL_LOOP ;if not loop
pop af
ret
;================================================================
; Init screen modes
;================================================================
VDP_INIT_TEXT2:
; init vdp (80col text)
ld e, VDPR_MODE0
ld a, 00000100b ;TEXT2
call VDP_SETREG
ld e, VDPR_MODE1 ;blank screen wit 64K enabled
ld a, 00001000b
call VDP_SETREG
ld e, VDPR_MODE2
ld a, TMS_R8_SPD
call VDP_SETREG
ld e, VDPR_MODE3
ld a, 00000010b
call VDP_SETREG
; set memory layout
; set pattern name table
ld e, VDPR_PATNMEBASE
ld a, 00000011b
call VDP_SETREG
ld e, VDPR_PATGENBASE
ld a, 00000010b
call VDP_SETREG
ld e, VDPR_COLTBBASE0
ld a, 00101111b
call VDP_SETREG
ld e, VDPR_COLTBBASE1
ld a, 00000000b
call VDP_SETREG
;enable cpu wait (for fast writes. Required!!!!)
ld e,25
ld a,4
call VDP_SETREG
;setup cursor:
ld e, 13 ; set blink rate
ld a, 0x22
call VDP_SETREG
;fill nametable to 0
ld de, 0x0000
ld bc, 0x2000
ld a, 0
call VDP_FILL
;load font
ld hl, [VDP_FONT_6x8_80COL]
ld bc, 256*8
ld de, 0x1000
call VDP_LOADRAM
;enable screen wit 64K enabled
ld e, VDPR_MODE1
ld a, 01010000b
call VDP_SETREG
ret
;================================================================
; Fonts
;================================================================
VDP_FONT_6x8_80COL:
.include "font80.s"

View File

@@ -0,0 +1,5 @@
;----------------------------------------------------------------
;Ringbuffer data structure
;by Dennis Gunia (07/2024)
;----------------------------------------------------------------

View File

@@ -0,0 +1,706 @@
; TMS9918A graphics subroutines
; Copyright 2018-2020 J.B. Langston
;
; Permission is hereby granted, free of charge, to any person obtaining a
; copy of this software and associated documentation files (the "Software"),
; to deal in the Software without restriction, including without limitation
; the rights to use, copy, modify, merge, publish, distribute, sublicense,
; and/or sell copies of the Software, and to permit persons to whom the
; Software is furnished to do so, subject to the following conditions:
;
; The above copyright notice and this permission notice shall be included in
; all copies or substantial portions of the Software.
;
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
; DEALINGS IN THE SOFTWARE.
; VDP Programmer's Guide: http://map.grauw.nl/resources/video/ti-vdp-programmers-guide.pdf
phase 0xE400
; ---------------------------------------------------------------------------
; configuration parameters; can be changed at runtime
TmsPort:
defb 0xE0 ; port for TMS vram (reg is 1 higher)
TmsWait:
defb 64 ; iterations to wait after ram access
TmsMode:
defw 0 ; mode registers
TmsNameAddr:
defw 3800h ; name table address (multiples of 400H)
TmsColorAddr:
defw 2000h ; color table address (multiples of 40H)
TmsPatternAddr:
defw 0 ; pattern table (multiples of 800H)
TmsSpritePatternAddr:
defw 1800h ; sprite attribute table (multiples of 80H)
TmsSpriteAttrAddr:
defw 3bc0h ; sprite pattern table (multiples of 800H)
TmsScreenColors:
defb 0 ; background (low nybble), text color (high nybble)
; ---------------------------------------------------------------------------
; register constants
dephase
setup_vars:
ld a,0xE0
ld (TmsPort),a
ld a,2
ld (TmsWait),a
ld a,0
ld (TmsMode),a
ld a,0
ld (TmsMode+1),a
ld a,0
ld (TmsNameAddr),a
ld a,38h
ld (TmsNameAddr+1),a
ld a,0
ld (TmsPatternAddr),a
ld a,0
ld (TmsPatternAddr+1),a
ld a,0
ld (TmsColorAddr),a
ld a,20h
ld (TmsColorAddr+1),a
ld a,0
ld (TmsSpritePatternAddr),a
ld a,0x18
ld (TmsSpritePatternAddr+1),a
ld a,0xc0
ld (TmsSpriteAttrAddr),a
ld a,0x3b
ld (TmsSpriteAttrAddr+1),a
ret
TmsWriteBit: equ 40h ; bit to indicate memory write
; Registers
TmsCtrl0Reg: equ 80h
TmsCtrl1Reg: equ 81h
TmsNameReg: equ 82h
TmsColorTableReg: equ 83h
TmsPatternReg: equ 84h
TmsSpriteAttrReg: equ 85h
TmsSpritePatternReg: equ 86h
TmsColorReg: equ 87h
; Control Register Bits
TmsM3: equ 200h
TmsExtVideo: equ 100h
Tms16k: equ 80h
TmsDisplayEnable: equ 40h
TmsIntEnableBit: equ 20h
TmsM1: equ 10h
TmsM2: equ 8
TmsSprite32: equ 2
TmsSpriteMag: equ 1
; ---------------------------------------------------------------------------
; table lengths
TmsTileNameLen: equ 300h
TmsTextNameLen: equ 3c0h
TmsTileColorLen: equ 20h
TmsBitmapColorLen: equ 800h
TmsTilePatternLen: equ 800h
TmsTextPatternLen: equ 800h
TmsMulticolorPatternLen: equ 600h
TmsBitmapPatternLen: equ 1800h
; ---------------------------------------------------------------------------
; color constants
TmsTransparent: equ 0
TmsBlack: equ 1
TmsMediumGreen: equ 2
TmsLightGreen: equ 3
TmsDarkBlue: equ 4
TmsLightBlue: equ 5
TmsDarkRed: equ 6
TmsCyan: equ 7
TmsMediumRed: equ 8
TmsLightRed: equ 9
TmsDarkYellow: equ 0ah
TmsLightYellow: equ 0bh
TmsDarkGreen: equ 0ch
TmsMagenta: equ 0dh
TmsGray: equ 0eh
TmsWhite: equ 0fh
; ---------------------------------------------------------------------------
; port I/O routines
; These routines access the ports configured in TmsPort.
; These memory locations can be set at runtime to support different hardware
; configurations from the same binary. TmsProbe automatically detects the
; TMS9918A on common ports.
; The TMS9918A RAM must not be accessed more than once every 8 us or display
; corruption may occur. During vblank and with the display disabled,
; accesses can be 2 us apart, but we will always use 8 us minimum delay.
; TmsRamIn/TmsRamOut include a configurable delay loop, which waits for the
; configured iterations between VRAM writes to work properly with faster CPUs
; Minimum time to execute each procedure call:
; Z80: 88 cycles, 8.8 us @ 10 MHz
; Z180: 80 cycles, 8.64 us @ 9.216 MHz, 4.32 us @ 18.432, 2.16 us @ 36.864
;
; Additional delay per djnz iteration:
; Z80: 8 cycles * (iterations - 1)
; 0.8 us @ 10 MHz
; Z180: 7 cycles * (iterations - 1)
; 0.756 us @ 9.216 MHz, 0.378 us @ 18.432, 0.189 us @ 36.864
; Delay loop iterations required for different CPU speeds:
; Z80 @ 10 MHz or less: 1
; Z180 @ 9.216 MHz or less: 1
; Z180 @ 18.432 MHz: 10
; Z180 @ 36.864 MHz: 31
TmsWaits: defb 1, 10, 31 ; wait iterations to add for different CPU speeds
; set up wait time based on clock multiplier in E
TmsSetWait:
ld a,1
ld (TmsWait), a
ret
; try to find TMS9918A on common ports
TmsProbe:
ld hl, TmsPorts
ld b, TmsNumPorts
TmsProbeNext:
ld a, (hl)
ld (TmsPort), a
call TmsRegIn ; clear vsync bit
call TmsRegIn ; check it again
jp m, TmsProbeFailed ; if still set, not a TMS9918A
ld de, 0ffffh ; long enough for another vsync
TmsProbeWait:
call TmsRegIn ; check vsync bit again
ret m ; if set, it's a TMS9918A (and Z is clear)
dec de ; otherwise, keep waiting
ld a, e
or d
jp nz, TmsProbeWait
TmsProbeFailed:
inc hl ; if still clear after this long, try next port
djnz TmsProbeNext
xor a ; set Z if we ran out of ports to check
ret
TmsPorts: ; List of ports to probe:
defb 0x80 ; ColecoVision / SG-1000
defb 98h ; MSX
defb 10h ; Sord M5 (conflicts with z80ctrl SIO port)
;defb 8 ; Tatung Einstein (conflicts with z80ctrl drive ports)
;defb 1 ; MTX (not supported by TMS9918A video card)
; add additional ports to check here
TmsNumPorts: equ $ - TmsPorts
; set a single register value
; A = register value
; E = register to set
TmsSetReg:
call TmsRegOut
ld a, e
; fallthrough to TmsRegOut
; write to configured register port
; parameters:
; A = value to write
TmsRegOut:
push bc
ld bc, (TmsPort)
inc c
out (c), a
pop bc
ret
; read from configured register port
; returns:
; A = value read
TmsRegIn:
push bc
ld bc, (TmsPort)
inc c
in a, (c)
pop bc
ret
; write to configured VRAM port
; parameters:
; A = value to write
; Z80 | Z180 cycles...
TmsRamOut: ; 17 | 16 (call)
push bc ; 11 | 11
ld bc, (TmsPort) ; 20 | 18
out (c), a ; 12 | 10
TmsRamOutDelay:
djnz TmsRamOutDelay ; 8 | 7 plus (13 | 9) * (iterations-1)
pop bc ; 10 | 9
ret ; 10 | 9
; read from configured VRAM port
; returns:
; A = value read
TmsRamIn:
push bc
ld bc, (TmsPort)
TmsRamInDelay:
djnz TmsRamInDelay
in a, (c)
ld bc, (TmsPort)
TmsRamInDelay2:
djnz TmsRamInDelay2
pop bc
ret
; ---------------------------------------------------------------------------
; register configuration routines
; set the background color
; A = requested color
TmsBackground:
and 0fh
ld b, a
ld a, (TmsScreenColors)
and 0f0h
or b
ld (TmsScreenColors), a
ld e, TmsColorReg
jp TmsSetReg
; set the sprite configuration
; A = sprite options
TmsSpriteConfig:
and TmsSprite32|TmsSpriteMag
ld b, a
ld a, (TmsMode)
and ~(TmsSprite32|TmsSpriteMag)
or b
ld (TmsMode), a
ld e, TmsCtrl1Reg
jp TmsSetReg
; enable vblank interrupts
TmsIntEnable:
ld a, (TmsMode)
or TmsIntEnableBit
ld (TmsMode), a
ld e, TmsCtrl1Reg
jp TmsSetReg
; disable vblank interrupts
TmsIntDisable:
ld a, (TmsMode)
and ~TmsIntEnableBit
ld (TmsMode), a
ld e, TmsCtrl1Reg
jp TmsSetReg
; ---------------------------------------------------------------------------
; initialization routines
TmsBlankFlags: equ Tms16k
TmsTileFlags: equ Tms16k | TmsDisplayEnable
TmsTextFlags: equ Tms16k | TmsDisplayEnable | TmsM1
TmsMulticolorFlags: equ Tms16k | TmsDisplayEnable | TmsM2
TmsBitmapFlags: equ Tms16k | TmsDisplayEnable | TmsM3
; reset registers and clear all 16KB of video memory
TmsReset:
ld hl, TmsBlankFlags ; blank the screen with 16KB enabled
ld (TmsMode), hl
ld a, l
ld e, TmsCtrl1Reg
call TmsSetReg
ld a, h
ld e, TmsCtrl0Reg
call TmsSetReg
ld a, TmsTransparent
call TmsBackground
ld a, TmsTransparent
call TmsTextColor
ld de, 0 ; clear entire VRAM
ld bc, 4000h
ld a, 0
call TmsFill
ret
; initialize for multicolor mode
TmsMulticolor:
call TmsReset
ld de, (TmsNameAddr)
call TmsWriteAddr
ld d, 6 ; name table has 6 sections
ld e, 0 ; lines in first section start at 0
TmsSectionLoop:
ld c, 4 ; each section has 4 identical lines
TmsLineLoop:
ld b, 32 ; each line is 32 bytes long
ld a, e ; same starting value for each line in section
TmsByteLoop:
call TmsRamOut
inc a ; byte value
djnz TmsByteLoop
dec c ; line counter
jp nz, TmsLineLoop
ld e, a ; next starting value = current + 32
dec d ; section counter
jp nz, TmsSectionLoop
ld hl, TmsMulticolorFlags
ld (TmsMode), hl
jp TmsInitNonBitmap
; initialize for tiled graphics
TmsTile:
call TmsReset
ld hl, TmsTileFlags
ld (TmsMode), hl
jp TmsInitNonBitmap
; initialize for text mode
; HL = address of font to load
TmsTextMode:
push hl
call TmsReset
pop hl
ld de, (TmsPatternAddr) ; load font from address in hl
ld bc, TmsTextPatternLen
call TmsWrite
ld hl, TmsTextFlags
ld (TmsMode), hl
; fallthrough to TmsInitNonBitmap
; non-bitmap color and pattern table configuration
TmsInitNonBitmap:
; set up color table address (register = address / 400H)
ld a, (TmsColorAddr)
and 0c0h
ld (TmsColorAddr), a
ld d, a
ld a, (TmsColorAddr+1)
and 3fh
ld (TmsColorAddr+1), a
rl d
rla
rl d
rla
ld e, TmsColorTableReg
call TmsSetReg
; set up pattern table address (register = address / 800H)
xor a
ld (TmsPatternAddr), a
ld a, (TmsPatternAddr+1)
and 38h
ld (TmsPatternAddr+1), a
rrca
rrca
rrca
ld e, TmsPatternReg
call TmsSetReg
jp TmsInitCommon
; initialize for bitmapped graphics
TmsBitmap:
call TmsReset
ld de, (TmsNameAddr) ; initialize name table with 3 sets
call TmsWriteAddr ; of 256 bytes ranging from 00-FF
ld b, 3
xor a
TmsBitmapLoop:
call TmsRamOut
inc a
jp nz, TmsBitmapLoop
djnz TmsBitmapLoop
ld hl, TmsBitmapFlags
ld (TmsMode), hl
; set up color table at 0H (register = 7FH) or 2000H (register = 0FFH)
xor a
ld (TmsColorAddr), a
ld (TmsPatternAddr), a
ld a, (TmsColorAddr+1)
and 20h
ld (TmsColorAddr+1), a
ld a, 0ffh ; color table at 2000H
jp nz, TmsColorTableHigh
ld a, 7fh ; color table at 0H
TmsColorTableHigh:
ld e, TmsColorTableReg
call TmsSetReg
; set up pattern table at 0H (register = 3) or 2000H (register = 7)
ld a, (TmsPatternAddr+1)
and 20h
ld (TmsPatternAddr+1), a
ld a, 7 ; pattern table at 2000H
jp nz, TmsPatternTableHigh
ld a, 3 ; pattern table at 0H
TmsPatternTableHigh:
ld e, TmsPatternReg
call TmsSetReg
; fall through to TmsInitCommon
; common initialization for all modes
TmsInitCommon:
; set up name table address (register = address / 400H)
xor a
ld (TmsNameAddr), a
ld a, (TmsNameAddr+1)
and 3ch
ld (TmsNameAddr+1), a
rrca
rrca
ld e, TmsNameReg
call TmsSetReg
; set up sprite pattern table address (register = address / 80H)
ld a, (TmsSpriteAttrAddr)
and 80h
ld (TmsSpriteAttrAddr), a
ld d, a
ld a, (TmsSpriteAttrAddr+1)
and 7fh
rl d
rla
ld e, TmsSpriteAttrReg
call TmsSetReg
; set up sprite attribute table address (register = address / 800H)
xor a
ld (TmsSpritePatternAddr), a
ld a, (TmsSpritePatternAddr+1)
and 38h
ld (TmsSpritePatternAddr+1), a
rrca
rrca
rrca
ld e, TmsSpritePatternReg
call TmsSetReg
; set up control registers
ld e, TmsCtrl1Reg
ld a, (TmsMode)
call TmsSetReg
ld a, (TmsMode+1)
ld e, TmsCtrl0Reg
jp TmsSetReg
; ---------------------------------------------------------------------------
; memory access routines
; set the next address of vram to write
; DE = address
TmsWriteAddr:
ld a, e ; send lsb
call TmsRegOut
ld a, d ; mask off msb to max of 16KB
and 3fh
or TmsWriteBit ; indicate that this is a write
call TmsRegOut
ret
; set the next address of vram to read
; DE = address
TmsReadAddr:
ld a, e ; send lsb
call TmsRegOut
ld a, d ; mask off msb to max of 16KB
and 3Fh
call TmsRegOut
ret
; copy bytes from ram to vram
; HL = ram source address
; DE = vram destination address
; BC = byte count
TmsWrite:
call TmsWriteAddr
TmsWriteLoop:
ld a, (hl)
call TmsRamOut
inc hl
dec bc
ld a, b
or c
jp nz, TmsWriteLoop
ret
; fill a section of memory with a single value
; A = value to fill
; DE = vram destination address
; BC = byte count
TmsFill:
push af
call TmsWriteAddr
pop af
TmsFillLoop:
call TmsRamOut
dec c
jp nz, TmsFillLoop
djnz TmsFillLoop
ret
; ---------------------------------------------------------------------------
; text routines
; set text color
; A = requested color
TmsTextColor:
add a, a ; text color into high nybble
add a, a
add a, a
add a, a
ld b, a ; save for later
ld a, (TmsScreenColors) ; get current colors
and 0fh ; mask off old text color
or b ; set new text color
ld (TmsScreenColors), a
ld e, TmsColorReg
jp TmsSetReg ; save it back
; set the address to place text at X/Y coordinate
; A = X
; E = Y
TmsTextPos:
ld d, 0
ld hl, 0
add hl, de ; Y x 1
add hl, hl ; Y x 2
add hl, hl ; Y x 4
add hl, de ; Y x 5
add hl, hl ; Y x 10
add hl, hl ; Y x 20
add hl, hl ; Y x 40
ld e, a
add hl, de ; add X for final address
ld de, (TmsNameAddr) ; add name table base address
add hl, de
ex de, hl
jp TmsWriteAddr
; copy a null-terminated string to VRAM
; HL = ram source address
TmsStrOut:
ld a, (hl)
cp 0 ; return when NULL is encountered
ret z
call TmsRamOut
inc hl
jp TmsStrOut
; repeat a character a certain number of times
; A = character to output
; B = count
TmsRepeat:
call TmsRamOut
djnz TmsRepeat
ret
; output a character
; A = character to output
TmsChrOut: equ TmsRamOut
; ---------------------------------------------------------------------------
; bitmap routines
TmsClearPixel: equ 0A02Fh ; cpl, and b
TmsSetPixel: equ 0B0h ; nop, or b
; set operation for TmsPlotPixel to perform
; HL = pixel operation (TmsClearPixel, TmsSetPixel)
TmsPixelOp:
ld (TmsPixelOpPlaceHolder), hl
ret
; set or clear pixel at X, Y position
; B = Y position
; C = X position
TmsPlotPixel:
ld a, b ; bail out if Y coord > 191
cp 192
ret nc
call TmsXYAddr ; get address in DE for X/Y coord in BC
ld a, c ; get lower 3 bits of X coord
and 7
ld b, 0
ld c, a
ld hl, TmsMaskLookup ; address of mask in table
add hl, bc
ld b, (hl) ; save mask in B
ld hl, (TmsPatternAddr) ; get base address for pattern table
add hl, de
ex de, hl
call TmsReadAddr ; set read within pattern table
call TmsRamIn
TmsPixelOpPlaceHolder:
or b ; mask bit in previous byte
nop ; place holder for 2 byte mask operation
push af
call TmsWriteAddr ; set write address within pattern table
pop af
jp TmsRamOut
TmsMaskLookup:
defb 80h, 40h, 20h, 10h, 8h, 4h, 2h, 1h
; set the color for a block of pixels in bitmap mode
; B = Y position
; C = X position
; A = foreground/background color to set
TmsPixelColor:
push af
ld a, b ; bail out if Y coord > 191
cp 192
ret nc
call TmsXYAddr ; get address in DE for X/Y coord in BC
ld hl, (TmsColorAddr) ; add the color table base address
add hl, de
ex de, hl
call TmsWriteAddr ; set write address within color table
pop af
jp TmsRamOut
; calculate address byte containing X/Y coordinate
; B = Y position
; C = X position
; returns address in DE
TmsXYAddr:
ld a, b ; d = (y / 8)
rrca
rrca
rrca
and 1fh
ld d, a
ld a, c ; e = (x & f8)
and 0f8h
ld e, a
ld a, b ; e += (y & 7)
and 7
or e
ld e, a
ret

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,43 @@
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
; Program start
ld hl, [_isr_pio_test]
ld (INT_VEC_TABLE + 2), hl
;setup PIO
ld a, 11001111b ;setup as controll port
out (INT_PIO_ADDRC), a
ld a, 11110111b ;set all as inputs
out (INT_PIO_ADDRC), a
ld a, 00000010b ;set interrupt vector
out (INT_PIO_ADDRC), a
ld a, 11010111b ;enable interrupt; logic or, mask follows
out (INT_PIO_ADDRC), a
ld a, 00001011b ;set interrupt mask
;out (INT_PIO_ADDRC), a
;in a,(INT_PIO_ADDRD); clear buffer
ld a, 10000011b ;enable interrupt
out (INT_PIO_ADDRC), a
;call keyboard_init
;call keyb_cmd_enable
;call keyb_enable_int
ret
.include "kdrv_vt82c42.s"
.include "kdrv_int.s"
_eof:

View File

@@ -0,0 +1,323 @@
IDE_CMD_WRITESEC .EQU 0x30
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
; Program starts here
call TermInit
ret
;-------------------------------------------------
; Z8C/MEGA80 VDP Console IO Functions
; by Dennis Gunia 2022/02
; Version 0.1
;
; For Z8C Monitor
;-------------------------------------------------
; Constant Values
TermVarMemoryLocation equ 0x7000
; Dynamic VARs
TermVarTemplate:
phase TermVarMemoryLocation ;Change pointers to this template to the specified location
TermCurrentX: ; Start sector
defb 0x01
TermCurrentY: ; Start sector
defb 0x04
TermCursorState:
defb 0x00
TermCursorEnabled:
defb 0x00
TermVarTemplateEnd:
dephase
TermInit:
; Copy TermVarTemplate to memory
LD HL, TermVarMemoryLocation ;Load destination into HL
LD BC, [TermVarTemplate] ;Load source into BC
LD DE, [TermVarTemplateEnd] ;Load end into DE
TermInit_copy_loop:
LD A,(BC) ;Copy value
LD (HL),A
INC BC ;Increment pointers
INC HL
PUSH HL ;Backup HL
SBC HL,DE ;Check if next pointer matches end
POP HL ;Restore HL
JP NZ, TermInit_copy_loop ;Loop if pointer != end
; template copy done
; install font
call setup_vars
ld hl, TmsFont
call TmsTextMode ; initialize text mode
ld a, TmsDarkRed ; set colors
call TmsBackground
ld a, TmsWhite
call TmsTextColor
ld a, 0 ; put title at 11, 1
ld e, 0
call TmsTextPos
ld hl, TitleMessage ; output title
call TmsStrOut
ld a, 0 ; put title at 11, 1
ld e, 4
call TmsTextPos
ret
TermSetCursor:
ld a, (TermCurrentY)
ld e, a
ld a, (TermCurrentX)
call TmsTextPos
ret
TermPrintStr:
; BC contains String offset
; Prints null terminated string
PUSH AF
PUSH BC
TermPrintStr_LOOP:
LD A,(BC)
; Return if nullbyte
OR 0
JR Z, TermPrintStr_EXIT
; Print Char
CALL TermPrintChar
; INC BC and JP start of loop
INC BC
jp TermPrintStr_LOOP
TermPrintStr_EXIT:
POP BC
POP AF
RET
TermPrintChar:
push AF
push BC
push DE
push HL
; check if special char
cp 0x7F ; Backspace
jp z, TermPrintCharSPDelete
cp 13
jp z, TermPrintCharSPCR
cp 10
jp z, TermPrintCharSPLF
; a has char
call TmsChrOut
ld a,(TermCurrentX)
inc a
cp 39
jp z,TermPrintCharWrap; if line end
jp nc,TermPrintCharWrap; if line end
ld (TermCurrentX), a
call TermSetCursor
jp TermPrintCharDone
TermPrintCharWrap:
xor a
ld (TermCurrentX), a
ld a,(TermCurrentY)
cp 23 ; if already last line
jp z, TermPrintCharSPLFScroll
inc a
ld (TermCurrentY),a
call TermSetCursor
jp TermPrintCharDone
TermPrintCharSPDelete:
ld a,(TermCurrentX)
and a
jp z, TermPrintCharSPDeleteWrap ; if at pos X 0 then go previous line
dec a ; else decrement X
ld (TermCurrentX), a
call TermSetCursor
ld a, " "
call TmsChrOut
call TermSetCursor
jp TermPrintCharDone
TermPrintCharSPDeleteWrap:
ld a,39
ld (TermCurrentX), a
ld a,(TermCurrentY)
dec a
ld (TermCurrentY),a
call TermSetCursor
ld a, " "
call TmsChrOut
call TermSetCursor
jp TermPrintCharDone
TermPrintCharSPLF: ; linefeed
ld a,(TermCurrentY)
cp 23 ; if already last line
jp z, TermPrintCharSPLFScroll
inc a
ld (TermCurrentY),a
call TermSetCursor
jp TermPrintCharDone
TermPrintCharSPLFScroll:
call TermScroll
ld a,23
ld (TermCurrentY),a
call TermSetCursor
jp TermPrintCharDone
TermPrintCharSPCR: ; linefeed
xor a
ld (TermCurrentX),a
call TermSetCursor
jp TermPrintCharDone
TermPrintCharDone:
pop HL
pop DE
pop BC
pop AF
ret
TermScroll:
ld bc, 0x3800 ; load start of text-buffer into pointer
TermScrollLine:
ld h,b
ld l,c
ld de, 40 ; line width
add hl, de
ld a,l ; setup VDP address
out (0x81),a
ld a,h
and 3fh
out (0x81),a
call VDPWait
in a, (0x80) ; read byte
push af
ld a,c ; setup VDP address
out (0x81),a
ld a,b
and 3fh
or 40h ; write bit
out (0x81),a
pop af
call VDPWait
out (0x80),a
inc bc
ld h,b
ld l,c
ld de, VDPTextBufferEnd ; buffer end
sbc hl, de
jp nz, TermScrollLine
; clear last line
ld bc,920
ld a,c ; setup VDP address
out (0x81),a
ld a,b
and 3fh
or 40h ; write bit
out (0x81),a
ld c,40
TermScrollClearLine:
ld bc, 0x3800 + 920
TermScrollClearLineLoop:
ld a,c ; setup VDP addressh
out (0x81),a
ld a,b
and 3fh
or 40h ; write bit
out (0x81),a
ld a, ' '
out (0x80),a
call VDPWait
inc bc
ld h,b
ld l,c
ld de, 0x3800 + 960 ; buffer end
sbc hl, de
jp nz, TermScrollClearLineLoop
ret
VDPWait:
nop
nop
nop
nop
ret
VDPTextBufferStart equ 0
VDPTextBufferEnd equ 0x3800 + 920
TitleMessage:
db ' Z8C Mk IV - A Z80 Homebrew Computer '
db ' ROM Ver. 1.0 by Dennis Gunia (2024) '
db ' 64k RAM - 10MHz Z80 CPU ',0
TmsSubs:
.include "tms.s" ; TMS graphics routines
; .include "utility.s" ; BDOS utility routines
.include "font1.s"
TermClear:
ld bc, 0x3800
TermClearLoop:
ld a,c ; setup VDP addressh
out (0x81),a
ld a,b
and 3fh
or 40h ; write bit
out (0x81),a
ld a, ' '
out (0x80),a
call VDPWait
inc bc
ld h,b
ld l,c
ld de, 0x3800 + 960 ; buffer end
sbc hl, de
jp nz, TermClearLoop
xor a
ld (TermCurrentX), a
ld (TermCurrentY), a
call TermSetCursor
ret
; Program ends here
_eof:

View File

@@ -0,0 +1,62 @@
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
; Program start
call VDP_INIT_TEXT2
call VTERM_INIT
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
ld hl,[STR_Banner_Start_Test]
call VTERM_PRINT_STR
call VTERM_CURSOR_ON
ld b, TmsBlack
ld c, TmsWhite
call VDP_COLOR
TEST_ECHO:
call read_char
jp z, TEST_ECHO
call VTERM_PRINT
jr TEST_ECHO
ret
STR_Banner_Start_Test:
db 10,13,"Z8C Monitor V2.1 by Dennis Gunia (2022-2024)",10,13,"TEST",10,13,"NEW LINE",10,13,"TEST > ",0
.include "kdrv_vdpterm.s"
.include "krdv_vdp.s"
.include "kdrv_vt82c42.s"
.include "kdrv_int.s"
_eof:

View File

@@ -0,0 +1 @@
main*

View File

@@ -0,0 +1,595 @@
;This file is generated by the build script.
;Do not make any changes here!
?a0000 equ 0x14A5
?a0001 equ 0x1562
ADDR_RTC equ 0xD0
A_RTS_OFF equ 0x1BE
A_RTS_ON equ 0x1C7
BOOT_PHASE0 equ 0x83
BOOT_PHASE1 equ 0xA5
BOOT_PHASE1_LOOP equ 0xAE
BOOT_PHASE2 equ 0xB9
B_BEEP equ 0x50
B_DSKSEL equ 0x71
B_FATCD equ 0x7A
B_FATCREATE equ 0x7D
B_FATOPEN equ 0x74
B_FATREAD equ 0x77
B_FATWRITE equ 0x80
B_IICRECV equ 0x56
B_IICSEND equ 0x53
B_KEYREAD equ 0x6B
B_KEYSEND equ 0x6E
B_PRINTAHEX equ 0x62
B_PRINTCHAR equ 0x59
B_PRINTINLINE equ 0x5F
B_PRINTLN equ 0x65
B_PRINTSTR equ 0x5C
B_READCHAR equ 0x68
COMMAND equ 0x1944
COMMAND_BACKSPACE equ 0x1985
COMMAND_LUT equ 0x18B2
COMMAND_PROCESS equ 0x19AB
COMMAND_PROCESS_FOUND equ 0x19E6
COMMAND_PROCESS_LOOP equ 0x19AE
COMMAND_PROCESS_LOOP_STR1 equ 0x19B7
COMMAND_PROCESS_LOOP_STR2 equ 0x19CD
COMMAND_PROCESS_NEXT_ENTRY equ 0x19D2
COMMAND_PROCESS_NEXT_ENTRYI equ 0x19D1
COMMAND_PROCESS_NOT_FOUND equ 0x19DD
COMMAND_READ equ 0x1956
CONSOLE_INIT equ 0xDC
CONSOLE_INIT_CTC equ 0xDC
CONSOLE_INIT_SIO equ 0xE4
CS_APU_CTRL equ 0xF9
CS_APU_DATA equ 0xF8
CS_BANK equ 0x00
CS_CTC_0 equ 0x04
CS_CTC_1 equ 0x05
CS_CTC_2 equ 0x06
CS_CTC_3 equ 0x07
CS_DIP equ 0x01
CS_PIA_CR equ 0x33
CS_PIA_PA equ 0x30
CS_PIA_PB equ 0x31
CS_PIA_PC equ 0x32
CS_PIO_AC equ 0xF6
CS_PIO_AD equ 0xF4
CS_PIO_BC equ 0xF7
CS_PIO_BD equ 0xF5
CS_SIO_A_C equ 0x09
CS_SIO_A_D equ 0x08
CS_SIO_B_C equ 0x0B
CS_SIO_B_D equ 0x0A
DHEX_TO_BYTE equ 0x235
DHEX_TO_BYTE_FAILED equ 0x251
ERR_SYNTAX equ 0x19FC
EXEC_RST_08 equ 0xDD5
EXEC_RST_10 equ 0xDD9
EXEC_RST_18 equ 0xDE5
HEX_TO_BIN equ 0x255
HEX_TO_BIN_2 equ 0x263
HEX_TO_INVALID_2 equ 0x26A
IDE_CMD_IDENT equ 0xEC
IDE_CMD_READSEC equ 0x20
IDE_DEV_TABLE equ 0x1307
IDE_RD equ 0x40
IDE_REG_ALTSTS equ 0x16
IDE_REG_CMDSTS equ 0x0F
IDE_REG_DATA equ 0x08
IDE_REG_DRVADDR equ 0x17
IDE_REG_ERROR equ 0x09
IDE_REG_HCYL equ 0x0D
IDE_REG_HEAD equ 0x0E
IDE_REG_LBA0 equ 0x0B
IDE_REG_LBA1 equ 0x0C
IDE_REG_LBA2 equ 0x0D
IDE_REG_LBA3 equ 0x0E
IDE_REG_LCYL equ 0x0C
IDE_REG_SECTOR equ 0x0A
IDE_REG_SSECTOR equ 0x0B
IDE_RST equ 0x80
IDE_WR equ 0x20
IIC_CLK equ 0x01
IIC_DATA equ 0x02
INT_VEC equ 0x1B
IO_AY0_ADDR equ 0x40
IO_AY0_DATA equ 0x41
IO_AY1_ADDR equ 0x42
IO_AY1_DATA equ 0x43
IO_REG0 equ 0x20
IO_RTC_AMPM equ 0x25
IO_RTC_CTR_D equ 0x2D
IO_RTC_CTR_E equ 0x2E
IO_RTC_CTR_F equ 0x2F
IO_RTC_DAY0 equ 0x26
IO_RTC_DAY1 equ 0x27
IO_RTC_HOUR equ 0x24
IO_RTC_MIN0 equ 0x22
IO_RTC_MIN1 equ 0x23
IO_RTC_MON0 equ 0x28
IO_RTC_MON1 equ 0x29
IO_RTC_SEC0 equ 0x20
IO_RTC_SEC1 equ 0x21
IO_RTC_WEEK equ 0x2C
IO_RTC_YEAR1 equ 0x2B
IO_RTC_YERR0 equ 0x2A
MEM_FAT_AMOUNT equ 0x44B8
MEM_FAT_CLUSTERLEN equ 0x44BB
MEM_FAT_COUNT1 equ 0x44BC
MEM_FAT_CURDIR equ 0x44DF
MEM_FAT_CURRDIR equ 0x453F
MEM_FAT_DATASTART equ 0x44C1
MEM_FAT_DIRSEC equ 0x44CD
MEM_FAT_EXEC_COUNT equ 0x4545
MEM_FAT_EXEC_CURR equ 0x4543
MEM_FAT_EXEC_START equ 0x4547
MEM_FAT_FILEREMAIN equ 0x44C9
MEM_FAT_OF0_ATTRIBUTE equ 0x452F
MEM_FAT_OF0_CCLUST equ 0x4531
MEM_FAT_OF0_DATREM equ 0x453B
MEM_FAT_OF0_DATSEC equ 0x4537
MEM_FAT_OF0_FATSEC equ 0x4533
MEM_FAT_RESERVED equ 0x44B6
MEM_FAT_ROOTSTART equ 0x44C5
MEM_FAT_SECTORS equ 0x44B9
MEM_FAT_TMPFNAME equ 0x44CF
MEM_FAT_TMPPOINTER equ 0x44BD
MEM_IDE_BUFFER equ 0x42B6
MEM_IDE_DEVICE equ 0x41CB
MEM_IDE_DEV_TABLE equ 0x41D5
MEM_IDE_FSBUFFER equ 0x44B6
MEM_IDE_PARTITION equ 0x41CD
MEM_IDE_POINTER equ 0x41D1
MEM_IDE_SELECTED equ 0x4215
MEM_IDE_STATUS equ 0x41CC
MEM_IDE_STRING_0 equ 0x4216
MEM_IDE_STRING_1 equ 0x423E
MEM_IDE_STRING_2 equ 0x4266
MEM_IDE_STRING_3 equ 0x428E
MSG_CLEAR equ 0x1B6
NOT_IMPLEMENTED equ 0x19F5
OP_CALL equ 0x1A57
OP_CD equ 0x1E27
OP_CLR equ 0x1BEB
OP_DASM equ 0x1AD8
OP_DIR equ 0x1E23
OP_DUMP equ 0x1A77
OP_EXEC equ 0x1A3E
OP_FSEXEC equ 0x1E44
OP_IIC_IN equ 0x1B9F
OP_IIC_OUT equ 0x1B3F
OP_IO_IN equ 0x1B08
OP_IO_OUT equ 0x1B1E
OP_LSDSK equ 0x1E00
OP_RTIME equ 0x1BEF
OP_SELDSK equ 0x1E04
OP_SET equ 0x1AA7
OP_STIME equ 0x1D87
POST_CHECK_APU equ 0x1E7D
POST_CHECK_IDE_30 equ 0x1EA8
POST_CHECK_IDE_40 equ 0x1EBB
POST_CHECK_PIO equ 0x1E58
POST_START equ 0x1E48
POST_TEST_RTC equ 0x1ED5
PRG_RAM_START equ 0x4110
PRG_RAM_TOP equ 0xFF00
PRINTINLINE equ 0x1D0
PRINTSPEED equ 0x7FFE
PROG_MEM_START equ 0x4000
PROG_ROM_START equ 0x100
RST_00 equ 0x00
RST_08 equ 0x08
RST_10 equ 0x10
RST_18 equ 0x18
STACK_RAM_TOP equ 0xFFFF
START_ROM equ 0x00
STRCONV_BYTES_TO_HEX equ 0x26C
STRCONV_BYTES_TO_HEX_1 equ 0x27B
STRCONV_BYTES_TO_HEX_2 equ 0x285
STR_Banner_Start equ 0x2689
STR_PD_HEADER equ 0x186B
SYS_BUF_START equ 0x4010
SYS_RAM_START equ 0x4000
VAR_CONSOLE_BAUD equ 0x18
VAR_CONSOLE_CONF equ 0x0F
VDP_MEM equ 0x80
VDP_REG equ 0x81
_COMMAND_PROCESS_FOUND equ 0x19F4
_OP_CALL equ 0x1A76
_OP_IIC_ACK_ERR equ 0x1B84
_OP_IIC_ACK_ERR_str equ 0x1B8B
_OP_IIC_IN_LOOP equ 0x1BD1
_OP_IIC_IN_LOOP_TEXT equ 0x1BDE
_OP_IIC_OUT_LOOP equ 0x1B55
_OP_IIC_OUT_SEND equ 0x1B71
_OP_RTIME_NN equ 0x1BF2
_OP_RTIME_RD_CMD equ 0x1CAA
_OP_SELDSK_INVALID equ 0x1E13
_OP_SELDSK_INVALID_STR equ 0x1E2B
_OP_SET_LOOP equ 0x1ABF
_OP_STIME_INVALID equ 0x1D4D
_OP_STIME_PROMPT equ 0x1D64
_OP_STIME_PROMPT_ERR equ 0x1D7C
_OP_STIME_STR_DAY equ 0x1CAB
_OP_STIME_STR_HOUR equ 0x1CFC
_OP_STIME_STR_MIN equ 0x1D17
_OP_STIME_STR_MON equ 0x1CC6
_OP_STIME_STR_SEC equ 0x1D32
_OP_STIME_STR_YEAR equ 0x1CE1
_POST_CHECK_APU_FAILED equ 0x1E9C
_POST_CHECK_IDE_FAILED equ 0x1ECE
_POST_CHECK_PIO_FAILED equ 0x1E71
_POST_TEST_RTC_INVALID equ 0x1F0F
_POST_TEST_RTC_NOTFOUND equ 0x1F08
_STR_NOT_FOUND equ 0x1A17
_STR_NOT_IMPLEMENTED equ 0x1A03
_STR_SYNTAX equ 0x1A2B
_beep_pause_l1 equ 0xE01
_compare_filename_loop equ 0x234A
_compare_filename_nomatch equ 0x2358
_fancy_print_beep_pause equ 0x806A
_fancy_print_delay_loop equ 0x8076
_fat_cd_navigate equ 0x24FF
_fat_cd_navigate_end equ 0x2545
_fat_cd_navigate_errfile equ 0x256D
_fat_cd_navigate_errfile_str equ 0x259F
_fat_cd_navigate_error equ 0x2557
_fat_cd_navigate_error_str equ 0x2575
_fat_cd_navigate_findsec equ 0x2504
_fat_cd_navigate_findsec_skipslash equ 0x2530
_fat_cd_navigate_goback_fl equ 0x24BB
_fat_cd_navigate_inerror equ 0x2565
_fat_cd_navigate_inerrorS equ 0x255F
_fat_cd_navigate_inerrore equ 0x2566
_fat_cd_navigate_inputerr_str equ 0x258C
_fat_cd_navigate_l2 equ 0x2536
_fat_exec_notexec equ 0x2665
_fat_exec_notfound equ 0x264C
_fat_exec_read_done equ 0x2634
_fat_exec_readloop1 equ 0x2616
_fat_get_root_table_invalid equ 0x213A
_fat_getfatsec_notroot equ 0x2179
_fat_increment_32 equ 0x22D0
_fat_lfs_loop equ 0x2246
_fat_lfs_loop_compare_end equ 0x2282
_fat_lfs_loop_compare_match equ 0x2286
_fat_lfs_loop_compare_next_sector equ 0x2258
_fat_math_add32 equ 0x22E4
_fat_math_mul32 equ 0x2315
_fat_math_mul32_l equ 0x231C
_fat_math_mul32_noadd equ 0x2329
_fat_math_sector_add_16 equ 0x22BC
_fat_print_directory_dir equ 0x243A
_fat_print_directory_loop equ 0x23CD
_fat_print_directory_loop_break equ 0x2499
_fat_print_directory_loop_file equ 0x23E9
_fat_print_directory_loop_next equ 0x2465
_fat_print_directory_loop_next_sector equ 0x2470
_format_filename_fat16_clean equ 0x2361
_format_filename_fat16_loop equ 0x2368
_format_filename_fat16_loop_copy equ 0x237B
_format_filename_fat16_loop_skip_8 equ 0x2372
_ide_readsector_512_floop equ 0xE5D
_ideif_drv_sel_fail equ 0x15D2
_ideif_drv_sel_fstr0 equ 0x168F
_ideif_drv_sel_pstr equ 0x1686
_ideif_drv_sel_sstr0 equ 0x169D
_ideif_drv_sel_syn equ 0x16AA
_ideif_init_drive_charloop equ 0x1499
_ideif_init_drive_found equ 0x147B
_ideif_init_drive_loop equ 0x1463
_ideif_init_drive_nodrv equ 0x1476
_ideif_init_drive_prt_fnd equ 0x14F7
_ideif_init_drive_prt_l1 equ 0x14E5
_ideif_init_drive_prt_ln equ 0x14EF
_ideif_prnt_devtable_hdr equ 0x1612
_ideif_prnt_devtable_l1 equ 0x1373
_ideif_prnt_devtable_l1_e2 equ 0x1439
_ideif_prnt_devtable_l1_es equ 0x13B8
_ideif_prnt_devtable_l1_ms equ 0x1436
_ideif_prnt_devtable_l1_nxt equ 0x1380
_ideif_prnt_devtable_l1_s00 equ 0x13A6
_ideif_prnt_devtable_l1_s01 equ 0x13AB
_ideif_prnt_devtable_l1_s02 equ 0x13B0
_ideif_prnt_devtable_l1_sFF equ 0x13B5
_ideif_prnt_devtable_l1_sel equ 0x137E
_ideif_prnt_devtable_master equ 0x1676
_ideif_prnt_devtable_s00 equ 0x164A
_ideif_prnt_devtable_s01 equ 0x1655
_ideif_prnt_devtable_s02 equ 0x1660
_ideif_prnt_devtable_sFF equ 0x166B
_ideif_prnt_devtable_slave equ 0x167E
_read_bcd_invalid equ 0x18D
_shift4 equ 0x1DFB
beep equ 0xDE8
beep_loop equ 0xDEA
beep_pause equ 0xE00
compare_filename equ 0x2346
dasm_00 equ 0x9ED
dasm_01 equ 0xCD9
dasm_02 equ 0xA73
dasm_03 equ 0xCAB
dasm_08 equ 0xAF0
dasm_09 equ 0xC7E
dasm_0A equ 0xA55
dasm_0B equ 0xCC2
dasm_10 equ 0xA35
dasm_12 equ 0xA7E
dasm_18 equ 0x9F8
dasm_1A equ 0xA5F
dasm_20 equ 0xA12
dasm_22 equ 0xD1F
dasm_27 equ 0xAB8
dasm_28 equ 0xA0B
dasm_2A equ 0xCF0
dasm_2F equ 0xABC
dasm_30 equ 0xA03
dasm_32 equ 0xA89
dasm_37 equ 0xAC8
dasm_38 equ 0x9FC
dasm_3A equ 0xA69
dasm_3F equ 0xAC4
dasm_76 equ 0xACC
dasm_80C6 equ 0xB49
dasm_BE equ 0xAE6
dasm_C3 equ 0x9F1
dasm_C88E equ 0xB6F
dasm_C9 equ 0xA41
dasm_CD equ 0xA3B
dasm_D9 equ 0xAFD
dasm_DD equ 0xA23
dasm_DD_01 equ 0xCE0
dasm_DD_09 equ 0xC99
dasm_DD_22 equ 0xD35
dasm_DD_23 equ 0xCB0
dasm_DD_2A equ 0xD07
dasm_DD_2B equ 0xCC7
dasm_DD_34 equ 0xC49
dasm_DD_35 equ 0xC66
dasm_DD_86 equ 0xB51
dasm_DD_8E equ 0xB77
dasm_DD_96 equ 0xB9A
dasm_DD_9E equ 0xBBA
dasm_DD_A6 equ 0xBDB
dasm_DD_AE equ 0xC12
dasm_DD_B6 equ 0xBF7
dasm_DD_BE equ 0xC2E
dasm_DD_E1 equ 0xD87
dasm_DD_E3 equ 0xB0D
dasm_DD_E5 equ 0xD71
dasm_DD_F9 equ 0xD57
dasm_E1 equ 0xD81
dasm_E3 equ 0xB01
dasm_E5 equ 0xD6B
dasm_E9 equ 0xA1A
dasm_ED_42 equ 0xC90
dasm_ED_43 equ 0xD2B
dasm_ED_44 equ 0xAC0
dasm_ED_45 equ 0xA4B
dasm_ED_46 equ 0xAD7
dasm_ED_4A equ 0xC87
dasm_ED_4B equ 0xCFC
dasm_ED_4D equ 0xA46
dasm_ED_56 equ 0xADC
dasm_ED_5E equ 0xAE1
dasm_ED_A0 equ 0xB25
dasm_ED_A1 equ 0xB37
dasm_ED_A8 equ 0xB2E
dasm_ED_A9 equ 0xB40
dasm_ED_B0 equ 0xB29
dasm_ED_B1 equ 0xB3B
dasm_ED_B8 equ 0xB32
dasm_ED_B9 equ 0xB44
dasm_F3 equ 0xAD1
dasm_F9 equ 0xD4D
dasm_FB equ 0xAD4
dasm_FD equ 0xA2C
dasm_FD_01 equ 0xCE8
dasm_FD_09 equ 0xCA2
dasm_FD_22 equ 0xD41
dasm_FD_23 equ 0xCB9
dasm_FD_2A equ 0xD13
dasm_FD_2B equ 0xCD0
dasm_FD_34 equ 0xC55
dasm_FD_35 equ 0xC72
dasm_FD_86 equ 0xB60
dasm_FD_8E equ 0xB86
dasm_FD_96 equ 0xBA6
dasm_FD_9E equ 0xBC8
dasm_FD_A6 equ 0xBE7
dasm_FD_AE equ 0xC1E
dasm_FD_B6 equ 0xC02
dasm_FD_BE equ 0xC39
dasm_FD_E1 equ 0xD8F
dasm_FD_E3 equ 0xB19
dasm_FD_E5 equ 0xD79
dasm_FD_F9 equ 0xD61
dasm_FF equ 0xA50
dasm_UU equ 0xD97
dasm_UW equ 0xD9B
dasm__AND equ 0xBD6
dasm__CP equ 0xC2A
dasm__DEC equ 0xC61
dasm__ED_47 equ 0xAA8
dasm__ED_4F equ 0xAB0
dasm__ED_57 equ 0xA98
dasm__ED_5F equ 0xAA0
dasm__INC equ 0xC44
dasm__LD equ 0xA94
dasm__OR equ 0xBF3
dasm__SBC equ 0xBB2
dasm__SUB equ 0xB95
dasm__XOR equ 0xC0D
dasm_opcode_table equ 0x595
dasm_print16hex_addr equ 0x3C2
dasm_print8hex equ 0x3DA
dasm_printFlags_table equ 0xDA0
dasm_printRegister8_table equ 0xDB0
dasm_printRegister8_table_HL equ 0xDD0
dasm_printRegisterIX_table equ 0xDB8
dasm_printRegisterIY_table equ 0xDC0
dasm_printRegisterSP_table equ 0xDC8
disassemble equ 0x286
disassemble_continue equ 0x36C
disassemble_err equ 0x35C
disassemble_next equ 0x28A
disassemble_print_opcode_params_end equ 0x359
disassemble_print_opcode_params_loop equ 0x305
disassemble_print_opcode_raw equ 0x2C7
disassemble_print_opcode_raw_fill equ 0x2DB
disassemble_table_first_match equ 0x39E
disassemble_table_found equ 0x3B8
disassemble_table_notfound equ 0x3BC
disassemble_table_seek equ 0x37A
disassemble_table_seek_loop equ 0x37E
dump_pretty equ 0x1810
dump_pretty_ascii equ 0x183A
dump_pretty_ascii_cont equ 0x1858
dump_pretty_ascii_loop equ 0x1842
dump_pretty_ascii_none equ 0x1853
dump_pretty_col equ 0x182D
dump_pretty_end equ 0x186A
dump_pretty_nextrow equ 0x185E
dump_pretty_row equ 0x1818
endPrint equ 0x1DE
fancy_print equ 0x8000
fancy_print_beep equ 0x8051
fancy_print_beep_lp equ 0x8053
fancy_print_beep_pause equ 0x8069
fancy_print_char equ 0x803D
fancy_print_delay equ 0x8076
fancy_print_demo_text equ 0x8080
fancy_print_loop equ 0x8013
fancy_print_loop_char equ 0x8038
fancy_print_loop_speed equ 0x8021
fancy_print_loop_wait equ 0x802D
fat_cd_single equ 0x249B
fat_copy_lba_pointer equ 0x233D
fat_exec equ 0x25B6
fat_get_root_table equ 0x206D
fat_getfatsec equ 0x2162
fat_openfile equ 0x2217
fat_openfile_noprepare equ 0x221F
fat_print_directory equ 0x2382
fat_readfilesec equ 0x21EA
fat_reset_pointer equ 0x232E
format_filename_fat16 equ 0x235C
ide_printerror equ 0xE94
ide_readsector_512_fast equ 0xE49
ide_readsector_timeout equ 0xE7E
ide_regread_8 equ 0xE33
ide_regwrite_8 equ 0xE19
ide_reset equ 0xE0D
ide_writesector_256 equ 0xE93
ideif_drv_sel equ 0x159A
ideif_get_drv_pointer equ 0x153A
ideif_init_all equ 0x154E
ideif_init_devtable equ 0x1347
ideif_init_drive equ 0x145A
ideif_prnt_devtable equ 0x1365
iic_init equ 0x171C
iic_read_ack equ 0x1763
iic_receive_buffer equ 0x16ED
iic_receive_buffer_done equ 0x1710
iic_receive_buffer_err equ 0x1716
iic_receive_buffer_loop equ 0x16FE
iic_receive_byte equ 0x17E9
iic_receive_byte_loop equ 0x17F6
iic_send_ack equ 0x1789
iic_send_buffer equ 0x16C3
iic_send_buffer_done equ 0x16E1
iic_send_buffer_err equ 0x16E7
iic_send_buffer_loop equ 0x16D3
iic_send_byte equ 0x17C3
iic_send_byte_loop equ 0x17CF
iic_send_ebit equ 0x1742
iic_send_nack equ 0x17A6
iic_send_sbit equ 0x1729
interrupt_vectors equ 0x4000
mon_var_template equ 0x44
mon_var_template_end equ 0x50F
nxtILC equ 0x1D3
param_01 equ 0x3E8
param_02 equ 0x40F
param_03 equ 0x42C
param_03_done equ 0x464
param_03_neg equ 0x44D
param_04 equ 0x468
param_04_i equ 0x478
param_05 equ 0x47E
param_06 equ 0x48B
param_07 equ 0x4A5
param_08 equ 0x4B2
param_09 equ 0x4C7
param_09_0A equ 0x4CD
param_0A equ 0x4BE
param_10 equ 0x4DC
param_11 equ 0x4EC
param_11_12 equ 0x4FB
param_11_12_all equ 0x51B
param_11_12_def equ 0x50E
param_11_12_ix equ 0x513
param_11_12_iy equ 0x518
param_12 equ 0x4F4
param_13 equ 0x52C
param_80 equ 0x54B
param_80_seek equ 0x552
param_81 equ 0x542
param_comma equ 0x586
param_printRegister equ 0x561
param_printRegisterA equ 0x57F
param_printRegisterHL equ 0x577
print_16_hex equ 0x1A9
print_32_hex equ 0x190
print_a_hex equ 0x143
print_bcd equ 0x155
print_char equ 0x115
print_clear equ 0x126
print_newLine equ 0x12D
print_reg equ 0x1E3
print_str equ 0x11D
print_str_fixed equ 0x18AA
print_wait_out equ 0x138
read_bcd equ 0x177
read_char equ 0x15B
read_in_sts equ 0x16D
read_lba_sector equ 0x1561
str_dev_done equ 0x160A
str_dev_waitready equ 0x15F2
str_error_start equ 0xEC9
str_error_start1 equ 0xEE6
str_error_start2 equ 0xEEF
str_error_time equ 0xEF8
str_post_apu equ 0x1F67
str_post_ide_30 equ 0x1F16
str_post_ide_40 equ 0x1F31
str_post_nd equ 0x1F9D
str_post_ok equ 0x1FD5
str_post_pio equ 0x1F4C
str_post_rtc equ 0x1F82
str_post_rtc_iv equ 0x1FAB
var_apu_present equ 0x410A
var_buffer_len equ 0x4100
var_bytes_count equ 0x411A
var_curserchar equ 0x4106
var_curserlastaddr equ 0x4107
var_curseron equ 0x4105
var_curserstate equ 0x4104
var_curserx equ 0x4102
var_cursery equ 0x4103
var_dir equ 0x412B
var_idebuffer equ 0x41CB
var_input equ 0x417B
var_last_char equ 0x4101
var_opcode equ 0x4114
var_opcode_length equ 0x4116
var_opcode_pcount equ 0x4119
var_opcode_start equ 0x4110
var_opcode_string equ 0x4117
var_opcode_table equ 0x4112
var_opcode_x equ 0x4115
var_pio_present equ 0x4109
var_ps2mem equ 0x411B
var_scratch equ 0x410B

View File

@@ -0,0 +1 @@
../../../monitor_v2/zout/symbols.s

View File

@@ -0,0 +1,134 @@
CS_PIO_BD .EQU 0xF5
CS_PIO_BC .EQU 0xF7
CS_PIO_AD .EQU 0xF4
CS_PIO_AC .EQU 0xF6
.include "extern_symbols.s" ;include monitor symbols.
.org 0x8000
PRINTSPEED .EQU 0x7FFE
fancy_print:
call print_clear
ld bc, 65535
call fancy_print_delay
ld hl,[fancy_print_demo_text]
ld bc, 4500
ld (PRINTSPEED), bc
fancy_print_loop:
ld a,(hl)
inc hl
or a
ret z
cp 0xFE
jr z, fancy_print_loop_wait
cp 0xFD
jr z, fancy_print_loop_speed
jr fancy_print_loop_char
fancy_print_loop_speed:
ld a,(hl)
inc hl
ld c,a
ld a,(hl)
inc hl
ld b,a
ld (PRINTSPEED), bc
jr fancy_print_loop
fancy_print_loop_wait:
ld a,(hl)
inc hl
ld c,a
ld a,(hl)
inc hl
ld b,a
call fancy_print_delay
jr fancy_print_loop
fancy_print_loop_char:
call fancy_print_char
jr fancy_print_loop
fancy_print_char:
call print_char
ld DE, 0xA0
ld bc, 12
call fancy_print_beep
ld bc, (PRINTSPEED)
call fancy_print_delay
ret
fancy_print_beep:
push AF
push DE
fancy_print_beep_lp:
LD A,0x08
OUT (CS_PIO_AD), A
call fancy_print_beep_pause
LD A,0x00
OUT (CS_PIO_AD), A
call fancy_print_beep_pause
DEC DE
ld A,D
or E
jr NZ, fancy_print_beep_lp
pop de
pop af
ret
fancy_print_beep_pause:
PUSH BC
_fancy_print_beep_pause:
NEG ; 8 T-states
NEG ; 8 T-states
DEC BC ; 6 T-states
LD A,C ; 9 T-states
OR B ; 4 T-states
JP NZ,_fancy_print_beep_pause ; 10 T-states
POP BC
RET ; Pause complete, RETurn
; bc contians length
fancy_print_delay:
_fancy_print_delay_loop:
push AF
pop AF
push AF
pop AF
dec bc
ld a,b
or c
jr nz, _fancy_print_delay_loop
ret
;; 0x00 exits the print
;; 0xFE <uint16: delay> pauses the print
;; 0xFD <uint16: delay> changes the print speed
fancy_print_demo_text:
db "Hello Dennis ... ",0xFE
dw 65535
db "It's been a ", 0xFD
dw 24500
db "long long time.", 0xFD
dw 4500
db 10,13,0xFE
dw 65535
db 0xFE
dw 65535
db "I almost thought",0xFE
dw 65535
db 0xFD
dw 50000
db " ... ", 0xFD
dw 4500
db "you forgot me ...",0xFE
dw 65535
db 0xFE
dw 65535
db 10,13
db 10,13
db "I'm glad you are back!"
db 10,13
db 10,13
db 0

View File

@@ -0,0 +1 @@
../../../monitor_v2/zout/symbols.s

View File

@@ -0,0 +1,100 @@
IDE_CMD_WRITESEC .EQU 0x30
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
; Program starts here
;------------------------------------------------------------------------------
; write_lba_sector
;
; Writes A*512 byte sector ro disk
; HL contains pointer to LBA address
; DE contains data location
; A contains sector count
;------------------------------------------------------------------------------
write_lba_sector:
push af
ide_wait_rdy
pop af
;setup registers
LD B,IDE_REG_SECTOR ;amount of sectores
CALL ide_regwrite_8
LD A,(HL)
LD B,IDE_REG_LBA0
CALL ide_regwrite_8
INC HL
LD A,(HL)
LD B,IDE_REG_LBA1
CALL ide_regwrite_8
INC HL
LD A,(HL)
LD B,IDE_REG_LBA2
CALL ide_regwrite_8
INC HL
LD A,(HL)
AND 00001111b
OR 11100000b
LD B,IDE_REG_LBA3
CALL ide_regwrite_8
LD A,IDE_CMD_WRITESEC ;send read command
LD B,IDE_REG_CMDSTS
CALL ide_regwrite_8
jp ide_writesector_512_fast
ide_writesector_512_fast:
ld b, IDE_REG_CMDSTS ;check status
call ide_regread_8
bit 0,a ;Error Bit set
jp nz, ide_printerror ;then abort
bit 3,a ;wait for drq
jr z,ide_writesector_512_fast
ld b,0 ;256x
ld a, 10000000b ;CommandByte-A, Mode 0, PA Out, PC Out, PB Out
out (CS_PIA_CR), a ;Set Data direction to IN
_ide_writesector_512_loop:
ld a, IDE_REG_DATA ;CS0 and A=0 -> I/O register
out (CS_PIA_PC), a ;set register
ld a,(hl)
out (CS_PIA_PA),a
inc hl
ld a,(hl)
out (CS_PIA_PB),a
inc hl
or IDE_WR ;Set Read bit
out (CS_PIA_PC), a ;Write Read to bit controll lines
ld a, IDE_REG_DATA ;CS0 and A=0 -> I/O register
out (CS_PIA_PC), a ;set register
djnz _ide_writesector_512_loop ; loop for 512 bytes
_ide_writesector_512_waitready:
ld b, IDE_REG_CMDSTS;check drive status
call ide_regread_8
bit 0,a ;Error Bit set
jp nz, ide_printerror ;then abort
bit 7,a ;test if data is written
jp nz _ide_writesector_512_waitready ; if still writing, loop
bit 3,a ;test if drive awaits next sector
jp nz, ide_writesector_512_fast
ret z
; Program ends here
_eof:

View File

@@ -0,0 +1 @@
main*

View File

@@ -0,0 +1,585 @@
;This file is generated by the build script.
;Do not make any changes here!
?a0000 equ 0x14BB
?a0001 equ 0x1578
ADDR_RTC equ 0xD0
A_RTS_OFF equ 0x1D4
A_RTS_ON equ 0x1DD
BOOT_PHASE0 equ 0x86
BOOT_PHASE1 equ 0xA4
BOOT_PHASE1_LOOP equ 0xAD
BOOT_PHASE2 equ 0xB8
B_BEEP equ 0x50
B_DSKSEL equ 0x74
B_FATCD equ 0x7D
B_FATCREATE equ 0x80
B_FATOPEN equ 0x77
B_FATREAD equ 0x7A
B_FATWRITE equ 0x83
B_IICRECV equ 0x56
B_IICSEND equ 0x53
B_KEYREAD equ 0x6B
B_KEYREADASCII equ 0x6E
B_KEYSEND equ 0x71
B_PRINTAHEX equ 0x62
B_PRINTCHAR equ 0x59
B_PRINTINLINE equ 0x5F
B_PRINTLN equ 0x65
B_PRINTSTR equ 0x5C
B_READCHAR equ 0x68
COMMAND equ 0x195D
COMMAND_ABORT equ 0x195A
COMMAND_BACKSPACE equ 0x199E
COMMAND_LUT equ 0x18C8
COMMAND_PROCESS equ 0x19C4
COMMAND_PROCESS_FOUND equ 0x19FF
COMMAND_PROCESS_LOOP equ 0x19C7
COMMAND_PROCESS_LOOP_STR1 equ 0x19D0
COMMAND_PROCESS_LOOP_STR2 equ 0x19E6
COMMAND_PROCESS_NEXT_ENTRY equ 0x19EB
COMMAND_PROCESS_NEXT_ENTRYI equ 0x19EA
COMMAND_PROCESS_NOT_FOUND equ 0x19F6
COMMAND_READ equ 0x196F
CONSOLE_INIT equ 0xDB
CONSOLE_INIT_CTC equ 0xDB
CONSOLE_INIT_SIO equ 0xE3
CS_APU_CTRL equ 0xF9
CS_APU_DATA equ 0xF8
CS_BANK equ 0x00
CS_CTC_0 equ 0x04
CS_CTC_1 equ 0x05
CS_CTC_2 equ 0x06
CS_CTC_3 equ 0x07
CS_DIP equ 0x01
CS_PIA_CR equ 0x33
CS_PIA_PA equ 0x30
CS_PIA_PB equ 0x31
CS_PIA_PC equ 0x32
CS_PIO_AC equ 0xF6
CS_PIO_AD equ 0xF4
CS_PIO_BC equ 0xF7
CS_PIO_BD equ 0xF5
CS_SIO_A_C equ 0x09
CS_SIO_A_D equ 0x08
CS_SIO_B_C equ 0x0B
CS_SIO_B_D equ 0x0A
DHEX_TO_BYTE equ 0x24B
DHEX_TO_BYTE_FAILED equ 0x267
ERR_SYNTAX equ 0x1A15
EXEC_RST_08 equ 0xDEB
EXEC_RST_10 equ 0xDEF
EXEC_RST_18 equ 0xDFB
HEX_TO_BIN equ 0x26B
HEX_TO_BIN_2 equ 0x279
HEX_TO_INVALID_2 equ 0x280
IDE_CMD_IDENT equ 0xEC
IDE_CMD_READSEC equ 0x20
IDE_CMD_WRITESEC equ 0x30
IDE_DEV_TABLE equ 0x131D
IDE_RD equ 0x40
IDE_REG_ALTSTS equ 0x16
IDE_REG_CMDSTS equ 0x0F
IDE_REG_DATA equ 0x08
IDE_REG_DRVADDR equ 0x17
IDE_REG_ERROR equ 0x09
IDE_REG_HCYL equ 0x0D
IDE_REG_HEAD equ 0x0E
IDE_REG_LBA0 equ 0x0B
IDE_REG_LBA1 equ 0x0C
IDE_REG_LBA2 equ 0x0D
IDE_REG_LBA3 equ 0x0E
IDE_REG_LCYL equ 0x0C
IDE_REG_SECTOR equ 0x0A
IDE_REG_SSECTOR equ 0x0B
IDE_RST equ 0x80
IDE_WR equ 0x20
IIC_CLK equ 0x01
IIC_DATA equ 0x02
INT_VEC equ 0x1B
IO_AY0_ADDR equ 0x40
IO_AY0_DATA equ 0x41
IO_AY1_ADDR equ 0x42
IO_AY1_DATA equ 0x43
IO_REG0 equ 0x20
IO_RTC_AMPM equ 0x25
IO_RTC_CTR_D equ 0x2D
IO_RTC_CTR_E equ 0x2E
IO_RTC_CTR_F equ 0x2F
IO_RTC_DAY0 equ 0x26
IO_RTC_DAY1 equ 0x27
IO_RTC_HOUR equ 0x24
IO_RTC_MIN0 equ 0x22
IO_RTC_MIN1 equ 0x23
IO_RTC_MON0 equ 0x28
IO_RTC_MON1 equ 0x29
IO_RTC_SEC0 equ 0x20
IO_RTC_SEC1 equ 0x21
IO_RTC_WEEK equ 0x2C
IO_RTC_YEAR1 equ 0x2B
IO_RTC_YERR0 equ 0x2A
MEM_FAT_AMOUNT equ 0x44B8
MEM_FAT_CLUSTERLEN equ 0x44BB
MEM_FAT_COUNT1 equ 0x44BC
MEM_FAT_CURDIR equ 0x44DF
MEM_FAT_CURRDIR equ 0x453F
MEM_FAT_DATASTART equ 0x44C1
MEM_FAT_DIRSEC equ 0x44CD
MEM_FAT_EXEC_COUNT equ 0x4545
MEM_FAT_EXEC_CURR equ 0x4543
MEM_FAT_EXEC_START equ 0x4547
MEM_FAT_FILEREMAIN equ 0x44C9
MEM_FAT_OF0_ATTRIBUTE equ 0x452F
MEM_FAT_OF0_CCLUST equ 0x4531
MEM_FAT_OF0_DATREM equ 0x453B
MEM_FAT_OF0_DATSEC equ 0x4537
MEM_FAT_OF0_FATSEC equ 0x4533
MEM_FAT_RESERVED equ 0x44B6
MEM_FAT_ROOTSTART equ 0x44C5
MEM_FAT_SECTORS equ 0x44B9
MEM_FAT_TMPFNAME equ 0x44CF
MEM_FAT_TMPPOINTER equ 0x44BD
MEM_IDE_BUFFER equ 0x42B6
MEM_IDE_DEVICE equ 0x41CB
MEM_IDE_DEV_TABLE equ 0x41D5
MEM_IDE_FSBUFFER equ 0x44B6
MEM_IDE_PARTITION equ 0x41CD
MEM_IDE_POINTER equ 0x41D1
MEM_IDE_SELECTED equ 0x4215
MEM_IDE_STATUS equ 0x41CC
MEM_IDE_STRING_0 equ 0x4216
MEM_IDE_STRING_1 equ 0x423E
MEM_IDE_STRING_2 equ 0x4266
MEM_IDE_STRING_3 equ 0x428E
MSG_CLEAR equ 0x1CC
NOT_IMPLEMENTED equ 0x1A0E
OP_CALL equ 0x1A70
OP_CD equ 0x1E40
OP_CLR equ 0x1C04
OP_DASM equ 0x1AF1
OP_DIR equ 0x1E3C
OP_DUMP equ 0x1A90
OP_EXEC equ 0x1A57
OP_FSEXEC equ 0x1E5D
OP_IIC_IN equ 0x1BB8
OP_IIC_OUT equ 0x1B58
OP_IO_IN equ 0x1B21
OP_IO_OUT equ 0x1B37
OP_LSDSK equ 0x1E19
OP_RTIME equ 0x1C08
OP_SELDSK equ 0x1E1D
OP_SET equ 0x1AC0
OP_STIME equ 0x1DA0
POST_CHECK_APU equ 0x1E96
POST_CHECK_IDE_30 equ 0x1EC1
POST_CHECK_IDE_40 equ 0x1ED4
POST_CHECK_PIO equ 0x1E71
POST_START equ 0x1E61
POST_TEST_RTC equ 0x1EEE
PRG_RAM_START equ 0x4110
PRG_RAM_TOP equ 0xFF00
PRINTINLINE equ 0x1E6
PROG_MEM_START equ 0x4000
PROG_ROM_START equ 0x100
RST_00 equ 0x00
RST_08 equ 0x08
RST_10 equ 0x10
RST_18 equ 0x18
STACK_RAM_TOP equ 0xFFFF
START_ROM equ 0x00
STRCONV_BYTES_TO_HEX equ 0x282
STRCONV_BYTES_TO_HEX_1 equ 0x291
STRCONV_BYTES_TO_HEX_2 equ 0x29B
STR_Banner_Start equ 0x26A2
STR_PD_HEADER equ 0x1881
SYS_BUF_START equ 0x4010
SYS_RAM_START equ 0x4000
VAR_CONSOLE_BAUD equ 0x18
VAR_CONSOLE_CONF equ 0x0F
VDP_MEM equ 0x80
VDP_REG equ 0x81
_COMMAND_PROCESS_FOUND equ 0x1A0D
_OP_CALL equ 0x1A8F
_OP_IIC_ACK_ERR equ 0x1B9D
_OP_IIC_ACK_ERR_str equ 0x1BA4
_OP_IIC_IN_LOOP equ 0x1BEA
_OP_IIC_IN_LOOP_TEXT equ 0x1BF7
_OP_IIC_OUT_LOOP equ 0x1B6E
_OP_IIC_OUT_SEND equ 0x1B8A
_OP_RTIME_NN equ 0x1C0B
_OP_RTIME_RD_CMD equ 0x1CC3
_OP_SELDSK_INVALID equ 0x1E2C
_OP_SELDSK_INVALID_STR equ 0x1E44
_OP_SET_LOOP equ 0x1AD8
_OP_STIME_INVALID equ 0x1D66
_OP_STIME_PROMPT equ 0x1D7D
_OP_STIME_PROMPT_ERR equ 0x1D95
_OP_STIME_STR_DAY equ 0x1CC4
_OP_STIME_STR_HOUR equ 0x1D15
_OP_STIME_STR_MIN equ 0x1D30
_OP_STIME_STR_MON equ 0x1CDF
_OP_STIME_STR_SEC equ 0x1D4B
_OP_STIME_STR_YEAR equ 0x1CFA
_POST_CHECK_APU_FAILED equ 0x1EB5
_POST_CHECK_IDE_FAILED equ 0x1EE7
_POST_CHECK_PIO_FAILED equ 0x1E8A
_POST_TEST_RTC_INVALID equ 0x1F28
_POST_TEST_RTC_NOTFOUND equ 0x1F21
_STR_NOT_FOUND equ 0x1A30
_STR_NOT_IMPLEMENTED equ 0x1A1C
_STR_SYNTAX equ 0x1A44
_beep_pause_l1 equ 0xE17
_compare_filename_loop equ 0x2363
_compare_filename_nomatch equ 0x2371
_fat_cd_navigate equ 0x2518
_fat_cd_navigate_end equ 0x255E
_fat_cd_navigate_errfile equ 0x2586
_fat_cd_navigate_errfile_str equ 0x25B8
_fat_cd_navigate_error equ 0x2570
_fat_cd_navigate_error_str equ 0x258E
_fat_cd_navigate_findsec equ 0x251D
_fat_cd_navigate_findsec_skipslash equ 0x2549
_fat_cd_navigate_goback_fl equ 0x24D4
_fat_cd_navigate_inerror equ 0x257E
_fat_cd_navigate_inerrorS equ 0x2578
_fat_cd_navigate_inerrore equ 0x257F
_fat_cd_navigate_inputerr_str equ 0x25A5
_fat_cd_navigate_l2 equ 0x254F
_fat_exec_notexec equ 0x267E
_fat_exec_notfound equ 0x2665
_fat_exec_read_done equ 0x264D
_fat_exec_readloop1 equ 0x262F
_fat_get_root_table_invalid equ 0x2153
_fat_getfatsec_notroot equ 0x2192
_fat_increment_32 equ 0x22E9
_fat_lfs_loop equ 0x225F
_fat_lfs_loop_compare_end equ 0x229B
_fat_lfs_loop_compare_match equ 0x229F
_fat_lfs_loop_compare_next_sector equ 0x2271
_fat_math_add32 equ 0x22FD
_fat_math_mul32 equ 0x232E
_fat_math_mul32_l equ 0x2335
_fat_math_mul32_noadd equ 0x2342
_fat_math_sector_add_16 equ 0x22D5
_fat_print_directory_dir equ 0x2453
_fat_print_directory_loop equ 0x23E6
_fat_print_directory_loop_break equ 0x24B2
_fat_print_directory_loop_file equ 0x2402
_fat_print_directory_loop_next equ 0x247E
_fat_print_directory_loop_next_sector equ 0x2489
_format_filename_fat16_clean equ 0x237A
_format_filename_fat16_loop equ 0x2381
_format_filename_fat16_loop_copy equ 0x2394
_format_filename_fat16_loop_skip_8 equ 0x238B
_ide_readsector_512_floop equ 0xE73
_ideif_drv_sel_fail equ 0x15E8
_ideif_drv_sel_fstr0 equ 0x16A5
_ideif_drv_sel_pstr equ 0x169C
_ideif_drv_sel_sstr0 equ 0x16B3
_ideif_drv_sel_syn equ 0x16C0
_ideif_init_drive_charloop equ 0x14AF
_ideif_init_drive_found equ 0x1491
_ideif_init_drive_loop equ 0x1479
_ideif_init_drive_nodrv equ 0x148C
_ideif_init_drive_prt_fnd equ 0x150D
_ideif_init_drive_prt_l1 equ 0x14FB
_ideif_init_drive_prt_ln equ 0x1505
_ideif_prnt_devtable_hdr equ 0x1628
_ideif_prnt_devtable_l1 equ 0x1389
_ideif_prnt_devtable_l1_e2 equ 0x144F
_ideif_prnt_devtable_l1_es equ 0x13CE
_ideif_prnt_devtable_l1_ms equ 0x144C
_ideif_prnt_devtable_l1_nxt equ 0x1396
_ideif_prnt_devtable_l1_s00 equ 0x13BC
_ideif_prnt_devtable_l1_s01 equ 0x13C1
_ideif_prnt_devtable_l1_s02 equ 0x13C6
_ideif_prnt_devtable_l1_sFF equ 0x13CB
_ideif_prnt_devtable_l1_sel equ 0x1394
_ideif_prnt_devtable_master equ 0x168C
_ideif_prnt_devtable_s00 equ 0x1660
_ideif_prnt_devtable_s01 equ 0x166B
_ideif_prnt_devtable_s02 equ 0x1676
_ideif_prnt_devtable_sFF equ 0x1681
_ideif_prnt_devtable_slave equ 0x1694
_read_bcd_invalid equ 0x1A3
_shift4 equ 0x1E14
beep equ 0xDFE
beep_loop equ 0xE00
beep_pause equ 0xE16
compare_filename equ 0x235F
dasm_00 equ 0xA03
dasm_01 equ 0xCEF
dasm_02 equ 0xA89
dasm_03 equ 0xCC1
dasm_08 equ 0xB06
dasm_09 equ 0xC94
dasm_0A equ 0xA6B
dasm_0B equ 0xCD8
dasm_10 equ 0xA4B
dasm_12 equ 0xA94
dasm_18 equ 0xA0E
dasm_1A equ 0xA75
dasm_20 equ 0xA28
dasm_22 equ 0xD35
dasm_27 equ 0xACE
dasm_28 equ 0xA21
dasm_2A equ 0xD06
dasm_2F equ 0xAD2
dasm_30 equ 0xA19
dasm_32 equ 0xA9F
dasm_37 equ 0xADE
dasm_38 equ 0xA12
dasm_3A equ 0xA7F
dasm_3F equ 0xADA
dasm_76 equ 0xAE2
dasm_80C6 equ 0xB5F
dasm_BE equ 0xAFC
dasm_C3 equ 0xA07
dasm_C88E equ 0xB85
dasm_C9 equ 0xA57
dasm_CD equ 0xA51
dasm_D9 equ 0xB13
dasm_DD equ 0xA39
dasm_DD_01 equ 0xCF6
dasm_DD_09 equ 0xCAF
dasm_DD_22 equ 0xD4B
dasm_DD_23 equ 0xCC6
dasm_DD_2A equ 0xD1D
dasm_DD_2B equ 0xCDD
dasm_DD_34 equ 0xC5F
dasm_DD_35 equ 0xC7C
dasm_DD_86 equ 0xB67
dasm_DD_8E equ 0xB8D
dasm_DD_96 equ 0xBB0
dasm_DD_9E equ 0xBD0
dasm_DD_A6 equ 0xBF1
dasm_DD_AE equ 0xC28
dasm_DD_B6 equ 0xC0D
dasm_DD_BE equ 0xC44
dasm_DD_E1 equ 0xD9D
dasm_DD_E3 equ 0xB23
dasm_DD_E5 equ 0xD87
dasm_DD_F9 equ 0xD6D
dasm_E1 equ 0xD97
dasm_E3 equ 0xB17
dasm_E5 equ 0xD81
dasm_E9 equ 0xA30
dasm_ED_42 equ 0xCA6
dasm_ED_43 equ 0xD41
dasm_ED_44 equ 0xAD6
dasm_ED_45 equ 0xA61
dasm_ED_46 equ 0xAED
dasm_ED_4A equ 0xC9D
dasm_ED_4B equ 0xD12
dasm_ED_4D equ 0xA5C
dasm_ED_56 equ 0xAF2
dasm_ED_5E equ 0xAF7
dasm_ED_A0 equ 0xB3B
dasm_ED_A1 equ 0xB4D
dasm_ED_A8 equ 0xB44
dasm_ED_A9 equ 0xB56
dasm_ED_B0 equ 0xB3F
dasm_ED_B1 equ 0xB51
dasm_ED_B8 equ 0xB48
dasm_ED_B9 equ 0xB5A
dasm_F3 equ 0xAE7
dasm_F9 equ 0xD63
dasm_FB equ 0xAEA
dasm_FD equ 0xA42
dasm_FD_01 equ 0xCFE
dasm_FD_09 equ 0xCB8
dasm_FD_22 equ 0xD57
dasm_FD_23 equ 0xCCF
dasm_FD_2A equ 0xD29
dasm_FD_2B equ 0xCE6
dasm_FD_34 equ 0xC6B
dasm_FD_35 equ 0xC88
dasm_FD_86 equ 0xB76
dasm_FD_8E equ 0xB9C
dasm_FD_96 equ 0xBBC
dasm_FD_9E equ 0xBDE
dasm_FD_A6 equ 0xBFD
dasm_FD_AE equ 0xC34
dasm_FD_B6 equ 0xC18
dasm_FD_BE equ 0xC4F
dasm_FD_E1 equ 0xDA5
dasm_FD_E3 equ 0xB2F
dasm_FD_E5 equ 0xD8F
dasm_FD_F9 equ 0xD77
dasm_FF equ 0xA66
dasm_UU equ 0xDAD
dasm_UW equ 0xDB1
dasm__AND equ 0xBEC
dasm__CP equ 0xC40
dasm__DEC equ 0xC77
dasm__ED_47 equ 0xABE
dasm__ED_4F equ 0xAC6
dasm__ED_57 equ 0xAAE
dasm__ED_5F equ 0xAB6
dasm__INC equ 0xC5A
dasm__LD equ 0xAAA
dasm__OR equ 0xC09
dasm__SBC equ 0xBC8
dasm__SUB equ 0xBAB
dasm__XOR equ 0xC23
dasm_opcode_table equ 0x5AB
dasm_print16hex_addr equ 0x3D8
dasm_print8hex equ 0x3F0
dasm_printFlags_table equ 0xDB6
dasm_printRegister8_table equ 0xDC6
dasm_printRegister8_table_HL equ 0xDE6
dasm_printRegisterIX_table equ 0xDCE
dasm_printRegisterIY_table equ 0xDD6
dasm_printRegisterSP_table equ 0xDDE
disassemble equ 0x29C
disassemble_continue equ 0x382
disassemble_err equ 0x372
disassemble_next equ 0x2A0
disassemble_print_opcode_params_end equ 0x36F
disassemble_print_opcode_params_loop equ 0x31B
disassemble_print_opcode_raw equ 0x2DD
disassemble_print_opcode_raw_fill equ 0x2F1
disassemble_table_first_match equ 0x3B4
disassemble_table_found equ 0x3CE
disassemble_table_notfound equ 0x3D2
disassemble_table_seek equ 0x390
disassemble_table_seek_loop equ 0x394
dump_pretty equ 0x1826
dump_pretty_ascii equ 0x1850
dump_pretty_ascii_cont equ 0x186E
dump_pretty_ascii_loop equ 0x1858
dump_pretty_ascii_none equ 0x1869
dump_pretty_col equ 0x1843
dump_pretty_end equ 0x1880
dump_pretty_nextrow equ 0x1874
dump_pretty_row equ 0x182E
endPrint equ 0x1F4
fat_cd_single equ 0x24B4
fat_copy_lba_pointer equ 0x2356
fat_exec equ 0x25CF
fat_get_root_table equ 0x2086
fat_getfatsec equ 0x217B
fat_openfile equ 0x2230
fat_openfile_noprepare equ 0x2238
fat_print_directory equ 0x239B
fat_readfilesec equ 0x2203
fat_reset_pointer equ 0x2347
format_filename_fat16 equ 0x2375
ide_printerror equ 0xEAA
ide_readsector_512_fast equ 0xE5F
ide_readsector_timeout equ 0xE94
ide_regread_8 equ 0xE49
ide_regwrite_8 equ 0xE2F
ide_reset equ 0xE23
ide_writesector_256 equ 0xEA9
ideif_drv_sel equ 0x15B0
ideif_get_drv_pointer equ 0x1550
ideif_init_all equ 0x1564
ideif_init_devtable equ 0x135D
ideif_init_drive equ 0x1470
ideif_prnt_devtable equ 0x137B
iic_init equ 0x1732
iic_read_ack equ 0x1779
iic_receive_buffer equ 0x1703
iic_receive_buffer_done equ 0x1726
iic_receive_buffer_err equ 0x172C
iic_receive_buffer_loop equ 0x1714
iic_receive_byte equ 0x17FF
iic_receive_byte_loop equ 0x180C
iic_send_ack equ 0x179F
iic_send_buffer equ 0x16D9
iic_send_buffer_done equ 0x16F7
iic_send_buffer_err equ 0x16FD
iic_send_buffer_loop equ 0x16E9
iic_send_byte equ 0x17D9
iic_send_byte_loop equ 0x17E5
iic_send_ebit equ 0x1758
iic_send_nack equ 0x17BC
iic_send_sbit equ 0x173F
interrupt_vectors equ 0x4000
mon_var_template equ 0x44
mon_var_template_end equ 0x50F
nxtILC equ 0x1E9
param_01 equ 0x3FE
param_02 equ 0x425
param_03 equ 0x442
param_03_done equ 0x47A
param_03_neg equ 0x463
param_04 equ 0x47E
param_04_i equ 0x48E
param_05 equ 0x494
param_06 equ 0x4A1
param_07 equ 0x4BB
param_08 equ 0x4C8
param_09 equ 0x4DD
param_09_0A equ 0x4E3
param_0A equ 0x4D4
param_10 equ 0x4F2
param_11 equ 0x502
param_11_12 equ 0x511
param_11_12_all equ 0x531
param_11_12_def equ 0x524
param_11_12_ix equ 0x529
param_11_12_iy equ 0x52E
param_12 equ 0x50A
param_13 equ 0x542
param_80 equ 0x561
param_80_seek equ 0x568
param_81 equ 0x558
param_comma equ 0x59C
param_printRegister equ 0x577
param_printRegisterA equ 0x595
param_printRegisterHL equ 0x58D
print_16_hex equ 0x1BF
print_32_hex equ 0x1A6
print_a_hex equ 0x142
print_bcd equ 0x154
print_char equ 0x114
print_clear equ 0x125
print_newLine equ 0x12C
print_reg equ 0x1F9
print_str equ 0x11C
print_str_fixed equ 0x18C0
print_wait_out equ 0x137
read_bcd equ 0x18D
read_char equ 0x16C
read_char_raw equ 0x15A
read_in_sts equ 0x183
read_lba_sector equ 0x1577
str_dev_done equ 0x1620
str_dev_waitready equ 0x1608
str_error_start equ 0xEDF
str_error_start1 equ 0xEFC
str_error_start2 equ 0xF05
str_error_time equ 0xF0E
str_post_apu equ 0x1F80
str_post_ide_30 equ 0x1F2F
str_post_ide_40 equ 0x1F4A
str_post_nd equ 0x1FB6
str_post_ok equ 0x1FEE
str_post_pio equ 0x1F65
str_post_rtc equ 0x1F9B
str_post_rtc_iv equ 0x1FC4
var_apu_present equ 0x410A
var_buffer_len equ 0x4100
var_bytes_count equ 0x411A
var_curserchar equ 0x4106
var_curserlastaddr equ 0x4107
var_curseron equ 0x4105
var_curserstate equ 0x4104
var_curserx equ 0x4102
var_cursery equ 0x4103
var_dir equ 0x412B
var_idebuffer equ 0x41CB
var_input equ 0x417B
var_last_char equ 0x4101
var_opcode equ 0x4114
var_opcode_length equ 0x4116
var_opcode_pcount equ 0x4119
var_opcode_start equ 0x4110
var_opcode_string equ 0x4117
var_opcode_table equ 0x4112
var_opcode_x equ 0x4115
var_pio_present equ 0x4109
var_ps2mem equ 0x411B
var_scratch equ 0x410B

View File

@@ -7,6 +7,7 @@
beep:
push AF
push DE
di
beep_loop:
LD A,0x08
OUT (CS_PIO_AD), A
@@ -20,6 +21,7 @@ beep_loop:
jr NZ, beep_loop
pop de
pop af
ei
ret
beep_pause:

View File

@@ -23,6 +23,10 @@ COMMAND_LUT:
db "?", 0, [OP_DUMP], [OP_DUMP]>>8 ;Print memory
db 0xFF ;End of Table
COMMAND_ABORT:
;cleanup stack
ld sp, STACK_RAM_TOP
; return to prompt
COMMAND:
call print_newLine
ld hl,[var_dir]
@@ -148,6 +152,8 @@ COMMAND_PROCESS_FOUND:
_COMMAND_PROCESS_FOUND
JP (HL)
NOT_IMPLEMENTED:
LD HL,[_STR_NOT_IMPLEMENTED]
CALL print_str

View File

@@ -6,51 +6,19 @@
;9600 -> 12 / 00110000
;
CONSOLE_INIT:
CONSOLE_INIT_CTC:
;LD A,00001111b ; Set /16 Divider, CPU Trigger, Time COnstant Follows
LD A,01001111b ; External Trigger, Time COnstant Follows
OUT (CS_CTC_0),A
IN A,(CS_DIP) ; Read BAUD from DIP-Switches
;LD A,39
OUT (CS_CTC_0),A
CONSOLE_INIT_SIO:
LD A,00110000b ;write into WR0: error reset, select WR0
OUT (CS_SIO_A_C),A
LD a,018h ;write into WR0: channel reset
OUT (CS_SIO_A_C),A
LD a,004h ;write into WR0: select WR4
OUT (CS_SIO_A_C),A
LD a,01000100b ;write into WR4: clkx16,1 stop bit, no parity
OUT (CS_SIO_A_C),A
LD a,005h ;write into WR0: select WR5
OUT (CS_SIO_A_C),A
LD a,11101000b ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive
OUT (CS_SIO_A_C),A
LD a,01h ;write into WR0: select WR1
OUT (CS_SIO_A_C),A
LD a,00000100b ;no interrupt in CH B, special RX condition affects vect
OUT (CS_SIO_A_C),A
LD a,02h ;write into WR0: select WR2
OUT (CS_SIO_A_C),A
LD a,0h ;write into WR2: cmd line int vect (see int vec table)
;bits D3,D2,D1 are changed according to RX condition
OUT (CS_SIO_A_C),A
LD a,003h ;write into WR0: select WR3
OUT (CS_SIO_A_C),A
LD a,0C1h ;RX 8bit, auto enable off, RX on
OUT (CS_SIO_A_C),A
;Channel A RX active
RET
call con_rb_init; initialize ring buffer
call consio_init_a
ret
; A contains char
; Destroys A
print_char:
push af
out (CS_SIO_A_D),a
call print_wait_out
call consio_tx_a
pop af
;call print_char
ret
; HL contains pointer to string
; Destroy A, HL
@@ -105,7 +73,7 @@ print_bcd:
call print_char
ret
read_char:
read_char_raw:
call A_RTS_ON
nop
xor a ; a = 0
@@ -117,14 +85,8 @@ read_char:
in a, (CS_SIO_A_D) ; read char if avail
ret ; return
read_in_sts:
out (CS_SIO_A_C), a ; select reg 0
in a, (CS_SIO_A_C) ; read reg 0
and 1 ; mask D0 (recieve char available)
ret z
ld a, 0xFF
ret
read_char:
jp consio_rx_a
read_bcd;
call read_char
@@ -158,6 +120,59 @@ print_16_hex:
call print_a_hex
ret
;input ringbuffer
;initialize ringbuffer
con_rb_init:
xor a
ld (var_buffer_conin_in),a
ld (var_buffer_conin_out),a
ld (var_buffer_conin_sts),a
ret
con_rb_read:
push hl
push de
ld a,(var_buffer_conin_in)
ld b,a
ld a,(var_buffer_conin_out)
cp b ;check if equal
jp z, con_rb_read_empty
;if not equal, buffer contians data
ld h, high [var_buffer_conin_data] ;load high byte for pointer
ld l, a
ld a,(hl)
push af
;move pointer
ld a,(var_buffer_conin_out)
inc a
ld (var_buffer_conin_out),a
pop af
pop de
pop hl
ret
con_rb_read_empty:
ld a,1
ld (var_buffer_conin_sts),a
xor a
pop de
pop hl
ret
con_rb_write:
push hl
push af
ld h, high [var_buffer_conin_data] ;load high byte for pointer
ld a,(var_buffer_conin_in)
ld l,a
pop af
ld (hl),a
ld a,(var_buffer_conin_in)
inc a
ld (var_buffer_conin_in),a
;TODO: check for overflow
pop hl
ret
;MSG_CRSR_0:
; db 0x1B, "[?25h",0

View File

@@ -8,6 +8,7 @@
;================================================================
IDE_CMD_IDENT .EQU 0xEC ;Identify drive.
IDE_CMD_READSEC .EQU 0x20 ;Read sectors.
IDE_CMD_WRITESEC .EQU 0x30 ;Write sectors.
;================================================================
; IDE Variables

View File

@@ -0,0 +1,85 @@
INT_VEC_TABLE .equ [interrupt_vectors]
INT_PIO_ADDRD .equ CS_PIO_AD
INT_PIO_ADDRC .equ CS_PIO_AC
;initialize interrupt controller
intctrl_init:
;disable interrupt (just to make sure)
di
;setup interrupt table
ld a,high [INT_VEC_TABLE]
ld i,a
;setup PIO
ld a, 10000011b ;enable interrupt
out (INT_PIO_ADDRC), a
ld a, 00000010b ;set interrupt vector
out (INT_PIO_ADDRC), a
ld a, 11001111b ;setup as controll port
out (INT_PIO_ADDRC), a
ld a, 11110111b ;set all as inputs
out (INT_PIO_ADDRC), a
ld a, 10010111b ;enable interrupt; logic or, mask follows
out (INT_PIO_ADDRC), a
ld a, 11000000b ;set interrupt mask
out (INT_PIO_ADDRC), a
; set port
xor a
out (INT_PIO_ADDRD), a
;fill table
ld hl,[INT_VEC_TABLE]
ld b,128
_intctrl_init_fill_loop:
ld a, low [_int_invalid_int]
ld (hl),a
inc hl
ld a, high [_int_invalid_int]
ld (hl),a
inc hl
djnz _intctrl_init_fill_loop
;set int vector for PIO
ld hl, [_isr_pio]
ld (INT_VEC_TABLE + 2), hl
;enable interrupts
im 2
ret
;------------------------------------------------------------------------------
; setup interrupt for PIO pin
; inputs: a (interrupt pin)
; hl (jump addr)
;------------------------------------------------------------------------------
initctrl_int_register:
;------------------------------------------------------------------------------
; removes interrupt for PIO pin
; inputs: a (interrupt pin)
;------------------------------------------------------------------------------
initctrl_int_abandon:
; jumps to isr. MUST be exited with RETI opcode!
_isr_pio:
di
ld hl, [_str_pio_interrupt]
call print_str
;get int from pio
in a,(INT_PIO_ADDRD)
call print_a_hex
_int_invalid_int:
di
ld hl, [_str_invalid_interrupt]
call print_str
ei
reti
_str_invalid_interrupt:
db 10,13,"[KERNEL] INT: Invalid interrupt call! Exiting ISR.",10,13,0
_str_pio_interrupt:
db 10,13,"[KERNEL] INT: (DEBUG) Interrupt call from PIO.",10,13,0

View File

@@ -0,0 +1,124 @@
;----------------------------------------------------------------
;BIOS Driver for Serial Console
;by Dennis Gunia (07/2024)
;
;----------------------------------------------------------------
;================================================================
; I/O access functions
;================================================================
;initialize SIO Port A
consio_init_a:
call consio_init_ctc_a
call consio_init_a_sio
;call consio_init_a_int
ret
consio_init_a_sio:
ld A, 00110000b ;write into WR0: error reset, select WR0
out (CS_SIO_A_C), a
ld a, 018h ;write into WR0: channel reset
out (CS_SIO_A_C), a
ld a, 004h ;write into WR0: select WR4
out (CS_SIO_A_C), a
ld a, 01000100b ;write into WR4: clkx16,1 stop bit, no parity
out (CS_SIO_A_C), a
ld a, 005h ;write into WR0: select WR5
out (CS_SIO_A_C), a
ld a, 11101000b ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive
out (CS_SIO_A_C), a
ld a, 01h ;write into WR0: select WR1
out (CS_SIO_A_C), a
ld a, 00000100b ;no interrupt in CH B, special RX condition affects vect
out (CS_SIO_A_C), a
ld a, 02h ;write into WR0: select WR2
out (CS_SIO_A_C), a
ld a, 0h ;write into WR2: cmd line int vect (see int vec table)
;bits D3,D2,D1 are changed according to RX condition
out (CS_SIO_A_C), a
ld a, 003h ;write into WR0: select WR3
out (CS_SIO_A_C), a
ld a, 0C1h ;RX 8bit, auto enable off, RX on
out (CS_SIO_A_C), a
ret
consio_init_a_int:
;setup SIO interrupt vector
ld a, 2 ;write WR2
out (CS_SIO_B_C), a
ld a, 00000100b ;write Vector
out (CS_SIO_B_C), a
;setup SIO
ld a, 1 ;write WR1
out (CS_SIO_A_C), a
ld a, 00011000b ;enable INT on all RX
out (CS_SIO_A_C), a
;set ISR addr
ld hl, [consio_isr]
ld (INT_VEC_TABLE + 4), hl
ret
consio_init_ctc_a:
ld a, 01001111b; External Trigger, Time COnstant Follows
out (CS_CTC_0),a
in a, (CS_DIP) ; Read BAUD from DIP-Switches
out (CS_CTC_0),a
ret
consio_tx_a:
out (CS_SIO_A_D),a
consio_tx_a_waitout:
; check for TX buffer empty
sub a ;clear a, write into WR0: select RR0
inc a ;select RR1
out (CS_SIO_A_C),A
in A,(CS_SIO_A_C) ;read RRx
bit 0,A
jr z,consio_tx_a_waitout
ret
consio_rx_a:
call consio_rx_rts_a_on
xor a ; a = 0
out (CS_SIO_A_C), a ; select reg 0
in a, (CS_SIO_A_C) ; read reg 0
and 1 ; mask D0 (recieve char available)
call A_RTS_OFF
ret Z ; return 0 if no char
in a, (CS_SIO_A_D) ; read char if avail
ret ; return
consio_rx_rts_a_on:
ld a,005h ;write into WR0: select WR5
out (CS_SIO_A_C),A
ld a,0EAh ;DTR active, TX 8bit, BREAK off, TX on, RTS active
out (CS_SIO_A_C),A
ret
consio_rx_rts_a_off:
ld a,005h ;write into WR0: select WR5
out (CS_SIO_A_C),A
ld a,068h ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive
out (CS_SIO_A_C),A
ret
consio_rx_a_sts:
out (CS_SIO_A_C), a ; select reg 0
in a, (CS_SIO_A_C) ; read reg 0
and 1 ; mask D0 (recieve char available)
ret z
ld a, 0xFF
ret
;Interrupt service routine
consio_isr:
di
ld a, 00111000b ;RET fro INT
out (CS_SIO_B_C), a ;read data
in a, (CS_SIO_A_D)
call con_rb_write ;write to ringbuffer
ei
reti

View File

@@ -2,7 +2,7 @@
; BIOS Routines entry points
; Do not move in memory!!!!
;-------------------------------------
.org 0x0050
org 0x0050
B_BEEP:
jp beep

View File

@@ -58,10 +58,23 @@ INT_VEC:
;================================================================
; Memory layout
;================================================================
mon_var_template_sof .EQU mon_var_template + 1024
mon_var_template:
phase SYS_RAM_START
interrupt_vectors:
defs 256
var_buffer_conin_data: ;contains console input
defs 256
var_buffer_conin_in: ;pointer to write position of buffer
defb 0
var_buffer_conin_out: ;pointer to read position of buffer
defb 0
var_buffer_conin_sts:
defb 0
var_buffer_conout:
defb 0
var_buffer_len:
defb 0
var_last_char:
@@ -100,8 +113,7 @@ mon_var_template_end:
;================================================================
; Start of monitor
;================================================================
org 0x0050
.include "ref.s" ;static bios calls for programs
.include "ref.s" ;static bios calls for programs
BOOT_PHASE0: ;Setup Hardware
;Setup Stack-Pointer
@@ -122,15 +134,23 @@ BOOT_PHASE0: ;Setup Hardware
ld a, " "
ld (var_curserchar),a
;setup interrupt table
ld a,[interrupt_vectors]>>8
ld i,a
;Enable interupts
call intctrl_init
;Initialize Console (Serial-Port)
call CONSOLE_INIT
call CONSOLE_INIT
;clear memory area
ld hl, [mon_var_template_sof]
ld bc, [mon_var_template_end-mon_var_template_sof]
ld de, [mon_var_template_sof+1]
xor a
ld (hl),a
ldir
jp BOOT_PHASE2 ;skip rest of table init
BOOT_PHASE1: ;Copy default values to RAM
ld hl,mon_var_template
ld hl,mon_var_template + 1024
ld de,mon_var_template_end
ld bc,SYS_RAM_START
BOOT_PHASE1_LOOP:
@@ -165,6 +185,8 @@ BOOT_PHASE2: ;Hardware initialized.
xor a ;set dir to empty
ld (var_dir),a
ld (var_dir+1),a
;enable interrupts
ei
; Start commandline
jp COMMAND
@@ -183,6 +205,8 @@ BOOT_PHASE2: ;Hardware initialized.
.include "kdrv_ide8255.s" ;include ide interface driver.
.include "kdrv_ideif.s" ;include ide driver.
.include "kdrv_siic.s"
.include "kdrv_int.s"
.include "kdrv_sio.s"
.include "prettydump.s"
.include "command.s"
.include "cmd_mem.s"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,270 +0,0 @@
!0000 C3 50 00
!0008 C3 B6 0E
!0010 C3 BA 0E
!0018 C3 C6 0E
!0044 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!0054 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!0064 00 00 00 00 00 00 00 00 00 00
!0050 31 FF FF AF 32 04 40 32 05 40 3E 20 32 06 40 CD
!0060 70 02 21 44 00 11 2A 40 01 00 40 7E 02 23 03 E5
!0070 ED 52 E1 C2 6B 00 CD BC 02 21 C9 0E CD B1 02 CD
!0080 8B 00 76 47 7A D3 40 78 D3 41 C9 CD C3 02 3E 3E
!0090 CD A9 02 AF 32 00 40 CD EA 02 CA 97 00 F5 F1 FE
!00A0 0D CA EE 00 FE 0A CA 97 00 FE 08 CA C8 00 F5 21
!00B0 29 40 16 00 3A 00 40 5F 19 3C 32 00 40 F1 77 CD
!00C0 A9 02 23 AF 77 C3 97 00 3A 00 40 A7 CA 97 00 3D
!00D0 32 00 40 5F 16 00 21 29 40 19 AF 77 3E 08 CD A9
!00E0 02 3E 20 CD A9 02 3E 08 CD A9 02 C3 97 00 3A 29
!00F0 40 FE 24 CA 21 01 FE 3F CA 40 01 FE 21 CA AA 01
!0100 FE 69 CA 0F 02 FE 6F CA E6 01 FE 64 CA 2B 02 FE
!0110 78 CA 15 0F CD C3 02 21 F4 0E CD B1 02 C3 8B 00
!0120 C9 AF 32 29 40 21 2A 40 CD 16 03 47 7B A7 C2 64
!0130 02 21 2C 40 CD 16 03 4F 7B A7 C2 64 02 60 69 E9
!0140 CD C3 02 21 2A 40 CD 16 03 47 7B A7 C2 64 02 21
!0150 2C 40 CD 16 03 4F 7B A7 C2 64 02 3A 2E 40 FE 20
!0160 C2 64 02 21 2F 40 CD 16 03 F5 7B A7 C2 64 02 21
!0170 F9 0E CD B1 02 F1 60 69 47 CD C3 02 7C CD D9 02
!0180 7D CD D9 02 3E 20 CD A9 02 0E 08 7E CD D9 02 23
!0190 05 0D 78 A7 CA A4 01 79 A7 CA 79 01 3E 20 CD A9
!01A0 02 C3 8B 01 CD C3 02 C3 8B 00 21 2A 40 CD 16 03
!01B0 47 7B A7 C2 64 02 21 2C 40 CD 16 03 4F 7B A7 C2
!01C0 64 02 21 2E 40 7E FE 00 CA E0 01 FE 20 C2 64 02
!01D0 23 CD 16 03 02 7B A7 C2 64 02 03 23 23 C3 C5 01
!01E0 CD C3 02 C3 8B 00 21 2A 40 CD 16 03 4F 7B A7 C2
!01F0 64 02 3A 2C 40 FE 20 C2 64 02 21 2D 40 CD 16 03
!0200 F5 7B A7 C2 64 02 F1 ED 79 CD C3 02 C3 8B 00 21
!0210 2A 40 CD 16 03 4F 7B A7 C2 64 02 ED 78 F5 CD C3
!0220 02 F1 CD D9 02 CD C3 02 C3 8B 00 CD C3 02 21 2A
!0230 40 CD 16 03 47 7B A7 C2 64 02 21 2C 40 CD 16 03
!0240 4F 7B A7 C2 64 02 3A 2E 40 FE 20 C2 64 02 21 2F
!0250 40 CD 16 03 F5 7B A7 C2 64 02 60 69 F1 47 CD 67
!0260 03 C3 8B 00 CD C3 02 21 EF 0E CD B1 02 C3 8B 00
!0270 3E 4F D3 04 DB 01 D3 04 3E 30 D3 09 3E 18 D3 09
!0280 3E 04 D3 09 3E 44 D3 09 3E 05 D3 09 3E E8 D3 09
!0290 3E 01 D3 09 3E 04 D3 09 3E 02 D3 09 3E 00 D3 09
!02A0 3E 03 D3 09 3E C1 D3 09 C9 F5 D3 08 CD CE 02 F1
!02B0 C9 7E B7 28 06 CD A9 02 23 18 F6 C9 21 FC 02 CD
!02C0 B1 02 C9 3E 0A CD A9 02 3E 0D CD A9 02 C9 97 3C
!02D0 D3 09 DB 09 CB 47 28 F6 C9 F5 C5 D5 CD 4D 03 78
!02E0 CD A9 02 79 CD A9 02 D1 C1 F1 CD 0D 03 00 AF D3
!02F0 09 DB 09 E6 01 CD 04 03 C8 DB 08 C9 1B 5B 32 4A
!0300 1B 5B 48 00 3E 05 D3 09 3E 68 D3 09 C9 3E 05 D3
!0310 09 3E EA D3 09 C9 E5 7E CD 36 03 38 15 CB 27 CB
!0320 27 CB 27 CB 27 57 23 7E CD 36 03 38 05 B2 E1 1E
!0330 00 C9 1E FF E1 C9 D6 30 EA 4B 03 FE 0A 38 05 D6
!0340 07 EA 4B 03 FE 10 30 03 E6 0F C9 37 C9 F5 1F 1F
!0350 1F 1F CD 5C 03 47 F1 CD 5C 03 4F C9 E6 0F C6 30
!0360 FE 3A D8 C6 07 C9 C9 78 32 1A 41 22 10 41 7E 32
!0370 14 41 23 7E 32 15 41 2B CD 5B 04 78 B1 CA 3D 04
!0380 ED 43 12 41 03 03 03 03 0A 32 16 41 03 0A 5F 03
!0390 0A 57 ED 53 17 41 03 0A 32 19 41 2A 10 41 CD A3
!03A0 04 3A 16 41 47 2A 10 41 7E CD D9 02 23 10 F9 3E
!03B0 68 CD A9 02 3A 16 41 47 3E 06 90 47 3E 20 CD A9
!03C0 02 3E 20 CD A9 02 10 F4 3E 20 CD A9 02 E5 2A 17
!03D0 41 CD B1 02 3A 19 41 B7 CA 3A 04 2A 12 41 01 08
!03E0 00 09 3A 19 41 47 7E FE 01 CC C9 04 FE 02 CC F0
!03F0 04 FE 03 CC 0D 05 FE 04 CC 49 05 FE 05 CC 5F 05
!0400 FE 06 CC 6C 05 FE 07 CC 86 05 FE 08 CC 93 05 FE
!0410 09 CC A8 05 FE 10 CC BD 05 FE 11 CC CD 05 FE 12
!0420 CC D5 05 FE 13 CC 0D 06 FE 0A CC 9F 05 FE 80 CC
!0430 2C 06 FE 81 CC 23 06 23 10 AC E1 18 10 CD A3 04
!0440 7E CD BB 04 23 E5 21 78 0E CD B1 02 E1 CD C3 02
!0450 3A 1A 41 3D 32 1A 41 C2 6B 03 C9 E5 21 76 06 3A
!0460 14 41 4F 7E FE FF CA 9D 04 F5 23 46 2B 79 A0 4F
!0470 F1 B9 28 0B 06 00 0E 07 09 7E 4F 09 23 18 E0 23
!0480 23 4E 23 3A 15 41 46 A0 B9 2B 2B 2B 28 0B 06 00
!0490 0E 07 09 7E 4F 09 23 18 C6 44 4D E1 C9 06 00 0E
!04A0 00 E1 C9 3E 24 CD A9 02 7C CD D9 02 7D CD D9 02
!04B0 3E 68 CD A9 02 3E 20 CD A9 02 C9 CD D9 02 3E 68
!04C0 CD A9 02 3E 20 CD A9 02 C9 E5 ED 5B 10 41 13 1A
!04D0 6F 13 1A 67 3E 24 CD A9 02 7C CD D9 02 7D CD D9
!04E0 02 3E 68 CD A9 02 3E 20 CD A9 02 CD 67 06 E1 C9
!04F0 C5 ED 5B 10 41 1A 1F 1F E6 0E E5 21 81 0E 06 00
!0500 4F 09 CD B1 02 3E 20 CD A9 02 E1 C1 C9 ED 5B 10
!0510 41 13 1A F5 E6 80 C2 2E 05 3E 24 CD A9 02 3E 2B
!0520 CD A9 02 F1 CD D9 02 3E 68 CD A9 02 18 17 3E 24
!0530 CD A9 02 3E 2D CD A9 02 F1 ED 44 CD D9 02 3E 68
!0540 CD A9 02 18 00 CD 67 06 C9 ED 5B 10 41 13 1A FE
!0550 4D 28 06 3E 4E CD A9 02 C9 3E 49 CD A9 02 C9 C5
!0560 ED 5B 10 41 1A E6 38 CD BB 04 C1 C9 C5 ED 5B 10
!0570 41 1A 1F 1F 1F E6 07 CD 42 06 3E 20 CD A9 02 3E
!0580 2C CD A9 02 C1 C9 C5 ED 5B 10 41 1A E6 07 CD 42
!0590 06 C1 C9 C5 ED 5B 10 41 13 1A CD BB 04 C1 C9 E5
!05A0 ED 5B 10 41 13 13 18 06 E5 ED 5B 10 41 13 1A 6F
!05B0 13 1A 67 7C CD D9 02 7D CD D9 02 E1 C9 C5 ED 5B
!05C0 10 41 1A 1F 1F 1F E6 07 CD 42 06 C1 C9 E5 C5 ED
!05D0 5B 10 41 18 07 E5 C5 ED 5B 10 41 13 1A 1F 1F 1F
!05E0 E6 06 F5 2A 10 41 7E FE DD 28 09 FE FD 28 0A 21
!05F0 91 0E 18 08 21 99 0E 18 03 21 A1 0E F1 06 00 4F
!0600 09 7E CD A9 02 23 7E CD A9 02 C1 E1 C9 E5 C5 ED
!0610 5B 10 41 1A 1F 1F 1F E6 06 F5 2A 10 41 7E 21 A9
!0620 0E 18 D9 E5 C5 2A 17 41 06 02 18 07 E5 C5 2A 17
!0630 41 06 01 7E 23 A7 20 FB 05 C2 33 06 CD B1 02 C1
!0640 E1 C9 E5 FE 06 28 11 FE 07 28 15 21 91 0E 06 00
!0650 4F 09 7E CD A9 02 E1 C9 21 B1 0E CD B1 02 E1 C9
!0660 3E 41 CD A9 02 E1 C9 78 FE 01 C8 3E 20 CD A9 02
!0670 3E 2C CD A9 02 C9 00 FF 00 00 01 CE 0A 00 27 FF
!0680 00 00 01 99 0B 00 2F FF 00 00 01 9D 0B 00 ED FF
!0690 44 FF 02 A1 0B 00 3F FF 00 00 01 A5 0B 00 37 FF
!06A0 00 00 01 A9 0B 00 76 FF 00 00 01 AD 0B 00 F3 FF
!06B0 00 00 01 B2 0B 00 FB FF 00 00 01 B5 0B 00 ED FF
!06C0 46 FF 02 B8 0B 00 ED FF 56 FF 02 BD 0B 00 ED FF
!06D0 5E FF 02 C2 0B 00 EB FF 00 00 01 C7 0B 00 08 FF
!06E0 00 00 01 D1 0B 00 D9 FF 00 00 01 DE 0B 00 E3 FF
!06F0 00 00 01 E2 0B 00 DD FF E3 FF 02 EE 0B 00 FD FF
!0700 E3 FF 02 FA 0B 00 ED FF A0 FF 02 06 0C 00 ED FF
!0710 B0 FF 02 0A 0C 00 ED FF A8 FF 02 0F 0C 00 ED FF
!0720 B8 FF 02 13 0C 00 ED FF A1 FF 02 18 0C 00 ED FF
!0730 B1 FF 02 1C 0C 00 ED FF A9 FF 02 21 0C 00 ED FF
!0740 B9 FF 02 25 0C 00 C3 FF 00 00 03 D2 0A 01 01 C2
!0750 C7 00 00 03 D2 0A 03 02 80 01 18 FF 00 00 02 D9
!0760 0A 01 03 38 FF 00 00 02 DD 0A 01 03 30 FF 00 00
!0770 02 E4 0A 01 03 28 FF 00 00 02 EC 0A 01 03 20 FF
!0780 00 00 02 F3 0A 01 03 E9 FF 00 00 02 FB 0A 00 DD
!0790 FF E9 FF 02 04 0B 00 FD FF E9 FF 02 0D 0B 00 10
!07A0 FF 00 00 02 16 0B 01 03 CD FF 00 00 03 1C 0B 01
!07B0 01 C4 C7 00 00 03 1C 0B 02 02 01 C9 FF 00 00 01
!07C0 22 0B 00 C0 C7 00 00 01 22 0B 01 02 ED FF 4D FF
!07D0 02 27 0B 00 ED FF 45 FF 02 2C 0B 00 C7 C7 00 00
!07E0 01 31 0B 01 05 0A FF 00 00 01 36 0B 00 1A FF 00
!07F0 00 01 40 0B 00 3A FF 00 00 03 4A 0B 02 09 80 02
!0800 FF 00 00 01 54 0B 00 12 FF 00 00 01 5F 0B 00 32
!0810 FF 00 00 03 6A 0B 02 09 80 ED FF 57 FF 02 79 0B
!0820 00 ED FF 5F FF 02 81 0B 00 ED FF 47 FF 02 89 0B
!0830 00 ED FF 4F FF 02 91 0B 00 06 C7 00 00 02 75 0B
!0840 02 06 08 40 C0 00 00 01 75 0B 02 06 07 80 F8 00
!0850 00 01 2A 0C 01 07 C6 FF 00 00 02 2A 0C 01 08 DD
!0860 FF 86 FF 03 32 0C 02 08 80 FD FF 86 FF 03 41 0C
!0870 02 08 80 C8 F8 00 00 01 50 0C 01 07 8E F8 00 00
!0880 02 50 0C 01 08 DD FF 8E FF 03 58 0C 02 08 80 FD
!0890 FF 8E FF 03 67 0C 02 08 80 90 F8 00 00 01 76 0C
!08A0 01 07 D6 FF 00 00 02 76 0C 01 08 DD FF 96 FF 03
!08B0 7B 0C 02 08 80 FD FF 96 FF 03 87 0C 02 08 80 94
!08C0 F8 00 00 01 93 0C 01 07 DE FF 00 00 02 93 0C 01
!08D0 08 DD FF 9E FF 03 9B 0C 02 08 80 FD FF 9E FF 03
!08E0 A9 0C 02 08 80 A0 F8 00 00 01 B7 0C 01 07 E6 FF
!08F0 00 00 02 B7 0C 01 08 DD FF A6 FF 03 BC 0C 02 08
!0900 80 FD FF A6 FF 03 C8 0C 02 08 80 B0 F8 00 00 01
!0910 D4 0C 01 07 F6 FF 00 00 02 D4 0C 01 08 DD FF B6
!0920 FF 03 D8 0C 02 08 80 FD FF B6 FF 03 E3 0C 02 08
!0930 80 A8 F8 00 00 01 EE 0C 01 07 EE FF 00 00 02 EE
!0940 0C 01 08 DD FF AE FF 03 F3 0C 02 08 80 FD FF AE
!0950 FF 03 FF 0C 02 08 80 B8 F8 00 00 01 0B 0D 01 07
!0960 FE FF 00 00 02 0B 0D 01 08 DD FF BE FF 03 0F 0D
!0970 02 08 80 FD FF BE FF 03 1A 0D 02 08 80 04 C7 00
!0980 00 01 25 0D 01 10 DD FF 34 FF 03 2A 0D 02 08 80
!0990 FD FF 34 FF 03 36 0D 02 08 80 05 C7 00 00 01 42
!09A0 0D 01 10 DD FF 35 FF 03 47 0D 02 08 80 FD FF 35
!09B0 FF 03 53 0D 02 08 80 09 CF 00 00 01 5F 0D 01 11
!09C0 ED FF 4A CF 02 68 0D 01 12 ED FF 42 CF 02 71 0D
!09D0 01 12 DD FF 09 CF 02 7A 0D 01 12 FD FF 09 CF 02
!09E0 83 0D 01 12 03 CF 00 00 01 8C 0D 01 11 DD FF 23
!09F0 FF 02 91 0D 00 FD FF 23 FF 02 9A 0D 00 0B CF 00
!0A00 00 01 A3 0D 01 11 DD FF 2B FF 02 A8 0D 00 FD FF
!0A10 2B FF 02 B1 0D 00 01 CF 00 00 03 BA 0D 03 11 80
!0A20 09 DD FF 21 FF 04 C1 0D 01 0A FD FF 21 FF 04 C9
!0A30 0D 01 0A 2A FF 00 00 03 D1 0D 02 09 80 ED FF 4B
!0A40 CF 04 DD 0D 04 12 80 0A 81 DD FF 2A FF 04 E8 0D
!0A50 01 0A FD FF 2A FF 04 F4 0D 01 0A 22 FF 00 00 03
!0A60 00 0E 02 0A 80 ED FF 43 CF 04 0C 0E 03 0A 80 12
!0A70 DD FF 22 CF 04 16 0E 02 0A 80 FD FF 22 CF 04 22
!0A80 0E 02 0A 80 F9 FF 00 00 01 2E 0E 00 DD FF F9 FF
!0A90 02 38 0E 00 FD FF F9 FF 02 42 0E 00 C5 CF 00 00
!0AA0 01 4C 0E 01 13 DD FF E5 FF 02 52 0E 00 FD FF E5
!0AB0 FF 02 5A 0E 00 C1 CF 00 00 01 62 0E 01 13 DD FF
!0AC0 E1 FF 02 68 0E 00 FD FF E1 FF 02 70 0E 00 4E 4F
!0AD0 50 00 4A 50 20 00 2C 20 00 4A 52 20 00 4A 52 20
!0AE0 43 2C 20 00 4A 52 20 4E 43 2C 20 00 4A 52 20 5A
!0AF0 2C 20 00 4A 52 20 4E 5A 2C 20 00 4A 50 20 28 48
!0B00 4C 29 20 00 4A 50 20 28 49 58 29 20 00 4A 50 20
!0B10 28 49 59 29 20 00 44 4A 4E 5A 20 00 43 41 4C 4C
!0B20 20 00 52 45 54 20 00 52 45 54 49 00 52 45 54 4E
!0B30 00 52 53 54 20 00 4C 44 20 41 2C 28 42 43 29 00
!0B40 4C 44 20 41 2C 28 44 45 29 00 4C 44 20 41 2C 28
!0B50 00 68 29 00 4C 44 20 28 42 43 29 2C 20 41 00 4C
!0B60 44 20 28 44 45 29 2C 20 41 00 4C 44 20 28 00 68
!0B70 29 2C 20 41 00 4C 44 20 00 4C 44 20 41 2C 20 49
!0B80 00 4C 44 20 41 2C 20 52 00 4C 44 20 49 2C 20 41
!0B90 00 4C 44 20 52 2C 20 41 00 44 41 41 00 43 50 4C
!0BA0 00 4E 45 47 00 43 43 46 00 53 43 46 00 48 41 4C
!0BB0 54 00 44 49 00 45 49 00 49 4D 20 30 00 49 4D 20
!0BC0 31 00 49 4D 20 32 00 45 58 20 44 45 2C 20 48 4C
!0BD0 00 45 58 20 41 46 2C 20 41 46 E2 80 B2 00 45 58
!0BE0 58 00 45 58 20 28 53 50 29 2C 20 48 4C 00 45 58
!0BF0 20 28 53 50 29 2C 20 49 58 00 45 58 20 28 53 50
!0C00 29 2C 20 49 59 00 4C 44 49 00 4C 44 49 52 00 4C
!0C10 44 44 00 4C 44 44 52 00 43 50 49 00 43 50 49 52
!0C20 00 43 50 44 00 43 50 44 52 00 41 44 44 20 41 2C
!0C30 20 00 41 44 44 20 41 2C 20 28 49 58 2B 00 68 29
!0C40 00 41 44 44 20 41 2C 20 28 49 59 2B 00 68 29 00
!0C50 41 44 43 20 41 2C 20 00 41 44 43 20 41 2C 20 28
!0C60 49 58 2B 00 68 29 00 41 44 43 20 41 2C 20 28 49
!0C70 59 2B 00 68 29 00 53 55 42 20 00 53 55 42 20 28
!0C80 49 58 2B 00 68 29 00 53 55 42 20 28 49 59 2B 00
!0C90 68 29 00 53 42 43 20 41 2C 20 00 53 42 43 20 41
!0CA0 2C 28 49 58 2B 00 68 29 00 53 42 43 20 41 2C 28
!0CB0 49 59 2B 00 68 29 00 41 4E 44 20 00 41 4E 44 20
!0CC0 28 49 58 2B 00 68 29 00 41 4E 44 20 28 49 59 2B
!0CD0 00 68 29 00 4F 52 20 00 4F 52 20 28 49 58 2B 00
!0CE0 68 29 00 4F 52 20 28 49 59 2B 00 68 29 00 58 4F
!0CF0 52 20 00 58 4F 52 20 28 49 58 2B 00 68 29 00 58
!0D00 4F 52 20 28 49 59 2B 00 68 29 00 43 50 20 00 43
!0D10 50 20 28 49 58 2B 00 68 29 00 43 50 20 28 49 59
!0D20 2B 00 68 29 00 49 4E 43 20 00 49 4E 43 20 28 49
!0D30 58 2B 00 68 29 00 49 4E 43 20 28 49 59 2B 00 68
!0D40 29 00 44 45 43 20 00 44 45 43 20 28 49 58 2B 00
!0D50 68 29 00 44 45 43 20 28 49 59 2B 00 68 29 00 41
!0D60 44 44 20 48 4C 2C 20 00 41 44 43 20 48 4C 2C 20
!0D70 00 53 42 43 20 48 4C 2C 20 00 41 44 44 20 49 58
!0D80 2C 20 00 41 44 44 20 49 59 2C 20 00 49 4E 43 20
!0D90 00 49 4E 43 20 49 58 2C 20 00 49 4E 43 20 49 59
!0DA0 2C 20 00 44 45 43 20 00 44 45 43 20 49 58 2C 20
!0DB0 00 44 45 43 20 49 59 2C 20 00 4C 44 20 00 2C 20
!0DC0 00 4C 44 20 49 58 2C 20 00 4C 44 20 49 59 2C 20
!0DD0 00 4C 44 20 48 4C 2C 20 28 00 68 29 00 4C 44 20
!0DE0 00 2C 20 28 00 68 29 00 4C 44 20 49 58 2C 20 28
!0DF0 00 68 29 00 4C 44 20 49 59 2C 20 28 00 68 29 00
!0E00 4C 44 20 28 00 68 29 2C 20 48 4C 00 4C 44 20 28
!0E10 00 68 29 2C 20 00 4C 44 20 28 00 68 29 2C 20 49
!0E20 58 00 4C 44 20 28 00 68 29 2C 20 49 59 00 4C 44
!0E30 20 53 50 2C 20 48 4C 00 4C 44 20 53 50 2C 20 49
!0E40 58 00 4C 44 20 53 50 2C 20 49 59 00 50 55 53 48
!0E50 20 00 50 55 53 48 20 49 58 00 50 55 53 48 20 49
!0E60 59 00 50 55 53 48 20 00 50 55 53 48 20 49 58 00
!0E70 50 55 53 48 20 49 59 00 2E 3F 2E 00 20 20 20 20
!0E80 00 4E 5A 5A 00 4E 43 43 00 50 4F 50 45 50 00 4D
!0E90 00 42 43 44 45 48 4C 53 50 42 43 44 45 49 58 53
!0EA0 50 42 43 44 45 49 59 53 50 42 43 44 45 48 4C 41
!0EB0 46 28 48 4C 29 00 CD A9 02 C9 C5 D5 E5 CD EA 02
!0EC0 F5 F1 E1 D1 C1 C9 3E 00 C9 5A 38 43 20 4D 6F 6E
!0ED0 69 74 6F 72 20 56 32 20 62 79 20 44 65 6E 6E 69
!0EE0 73 20 47 75 6E 69 61 20 28 32 30 32 32 29 00 73
!0EF0 79 6E 3F 00 63 6D 64 3F 00 42 41 53 45 20 30 20
!0F00 20 31 20 20 32 20 20 33 20 20 34 20 20 35 20 20
!0F10 36 20 20 37 00 CD 04 03 3E A7 D3 06 3E 0E D3 06
!0F20 3E 00 D3 04 21 F5 0F 22 04 42 21 00 00 22 FC 40
!0F30 22 FE 40 3E 42 ED 47 ED 5E 21 70 10 CD B1 02 FB
!0F40 CD A6 10 3E 43 CD 46 10 CD 19 10 DA 43 0F FE 04
!0F50 CA AC 0F FE 18 CA 43 0F FE 01 CA 60 0F C3 B4 0F
!0F60 CD 19 10 DA 98 10 47 32 FB 40 CD 19 10 DA 98 10
!0F70 80 FE FF C2 B4 0F 3D 78 1F E6 7F 67 78 3D 0F E6
!0F80 80 6F 11 00 44 19 06 80 0E 00 E5 CD 19 10 DA 98
!0F90 10 E1 77 23 0C 05 C2 8A 0F CD 19 10 DA 98 10 57
!0FA0 0C CD 19 10 DA 98 10 5F 0C C3 8A 10 3E 06 CD 46
!0FB0 10 C3 EE 0F 3E 18 CD 46 10 3E 18 CD 46 10 3E 18
!0FC0 CD 46 10 3E 18 CD 46 10 3E 18 CD 46 10 3E 18 CD
!0FD0 46 10 3E 18 CD 46 10 3E 18 CD 46 10 3E 18 CD 46
!0FE0 10 3E 18 CD 46 10 3E 18 21 57 10 CD B1 02 F3 CD
!0FF0 C3 02 C3 8B 00 F3 08 D9 2A FC 40 23 22 FC 40 11
!1000 04 04 ED 52 C2 14 10 21 00 00 22 FC 40 2A FE 40
!1010 23 22 FE 40 08 D9 FB ED 4D F3 21 00 00 22 FC 40
!1020 22 FE 40 FB CD 0D 03 2A FE 40 7D FE 03 CA 44 10
!1030 AF D3 09 DB 09 E6 01 CA 27 10 DB 08 F5 CD 04 03
!1040 F1 37 3F C9 37 C9 D3 08 CD 4C 10 C9 97 3C D3 09
!1050 DB 09 CB 47 28 F6 C9 45 72 72 6F 72 3A 20 75 6E
!1060 65 78 70 65 63 74 65 64 20 62 79 74 65 0D 0A 00
!1070 41 77 61 69 74 20 78 6D 6F 64 65 6D 20 63 6F 6E
!1080 6E 65 63 74 69 6F 6E 0D 0A 00 3E 06 CD 46 10 CD
!1090 19 10 DA 8A 10 C3 4E 0F 3E 15 CD 46 10 CD 19 10
!10A0 DA 98 10 C3 4E 0F 21 FF 00 01 01 00 00 00 00 00
!10B0 ED 42 C8 18 F7

File diff suppressed because it is too large Load Diff