RE: BIOS037.ZIP 30-Jan-2011 Add a setup option for CP/M-86 to bypass the DOS boot signature check. Add a P.O.S.T. (Power-On Self Test) of all of memory below 640K, or wherever the upper limit lies. An upgrade to this BIOS is recommended because of the POST. --John ======================================================================= RE: BIOS036.ZIP 20-Jan-2011 There are BIOS updates to support the 4meg Expanded Memory (4MEM) boards. Up to 4 boards are supported with the requirement that they be jumpered for ECB device codes 00h, 02h, 04h, ...; i.e., the device codes must be sequential. The first board is configured to be at device code 00h in CONFIG.ASM. There is a new configuration option to fill memory above 512k, which is currently set to fill to 640k. Another configuration option controls the creation of Upper Memory Blocks, which currently configures UMBs from C000h to F7FFh. By changing this option, all memory (except ROM) above 512k may be allocated. This would be for any OS other than DOS. The first beta release of a DOS Expanded Memory Manager which supports most of LIM EMS 3.2, is also included. It likewise reads configuration options from CONFIG.ASM. Enough of the 3.2 standard is implemented to support RAMDRIVE.SYS. If the 4MEM board is battery backed, then the RAMDRIVE is preserved for the next power up. Current options for the mapped frame address and number of memory block handles are assembled into the code. The current frame is at E800 (replacing the UMB there) and there are 16 handles available. Missing from EMM4MEM.SYS are the EMS calls that support Windows 3.0. [I don't think anyone is going to be running this on a '188.] An upgrade to this BIOS is optional. BIOS035 is still current for both SBC-188 00.4 and 1.0. BIOS036 supports both boards, and the combination SBC-188 1.0 with board 4MEM 1.0. N.B. The ECB bus appears to be limited to 16Mhz. I have been unsuccessful trying to run the two-board combination above this clock speed. Standalone SBC-188's have been successfully run by several people at up to 25Mhz. --John ======================================================================= RE: BIOS035.ZIP 17-Dec-2010 The PPIDE (Parallel Port IDE) BIOS is expanded to add the EDD 1.1 calls for big disks. For disks that use translated geometry, the number of heads is capped at 255, rather than 256. The latter gave some MSDOS utilities the fits. --John ======================================================================= RE: BIOS034.ZIP 08-Dec-2010 IDE drives are supported using the Parallel Interface and the PPIDE board (from Max). This little gem is good for supporting CF cards. The driver was cribbed from the Z80 driver, and expanded to support both Master and Slave devices. The first drive must be configured as Master; and any second drive must be configured as Slave. BIOS Setup is expanded to include the number of IDE drives attached. Actual identification of the drive(s) and configuration of the geometry is done dynamically at boot-time. Drives must be new enough to support the ID command (0ECh) on the IDE interface. Large drives with more than 1024 cylinders will be configured with "mapped" geometry, meaning the number of heads and sectors will be increased to reduce the number of logical cylinders. Actual drive access is done through LBA read/write calls. Drives must support LBA addressing (most CF cards do). LBA support (or not) is reported at boot time. I've successfully booted MSDOS 5.00 from two different CF cards. Reading from a 40Gb hard disk has been successful. The PPIDE driver still needs a few more BIOS calls implemented, but this release is being made to see how far others can get with the PPIDE interface. Please report successes as well as failures. --John ======================================================================== RE: BIOS033.ZIP 17-Nov-2010 The floppy driver adds the Verify Sector (fn 04) and change-line calls (fn 15h & 16h). The change line call 16h is a compromise, as my drive apparently does not have change line support to test. The compromise is to say the disk has not been changed if the motor is still running. Otherwise it is reported as changed. Signon cosmetics are improved, and the terminal emulation is reported. Binaries, by default, are generated for an ANSI terminal. CONFIG.ASM may be edited for other terminals. --John ======================================================================== RE: BIOS032A-merged.ZIP and BIOS032-Sergey.ZIP 02-Nov-2010 This BIOS032A merges in additional codes which were being worked in parallel. The primary difference is the WYSE terminal updates which include Terminal DTR/DSR flow control. Sergey's notes BIOS032-Sergey.txt are reproduced below. --John ======================================================================== Notes for BIOS031-Sergey.zip ----------------------------- This version is based on BIOS030-Sergey Changes from BIOS030: - MS-DOS 6.22 now boots on SBC-188!!! - Moved external I/O to base address 0400h. Apparently MS-DOS likes messing directly with hardware, and it was corrupting UART registers. - startup.asm - updated PACS (cpu_pacs) register value, so chip selects will start from 0400h. - cpuregs.asm updated accordingly. IO_BASE defines the external I/0 base address, and other definitions use it. - ds1302.asm updated to actually use RTC address defined in cpuregs.asm - Implemented user timer tick interrupt - Int 1Ch - Updated timers.asm to call this interrupt from timer ISR - Added BIOS_call_1Ch to rbios.asm - just an empty ISR - (Mostly) empty ISRs for Int 14h (serial I/O) and Int 17h (printer I/O) - Added some debug code (enabled with DEBUG option in the makefile) - Mostly to debug "hard lock" problems - Copies interrupt table content on reset to 0000:8000 so we can see if somebody patched interrups and what is the new ISR addresses - NMI debug code - copies SP, SS, IP, CS, BP and FLAGS to 0000:7FF0. Changes for BIOS029B: - Implemented Int 19 properly - now it tries to load and start a bootsector from the first floppy disk (00h) and from the first hard disk (80h) If failed it calls Int 18 to start ROM Basic (we don't have one...) - Implemented Int 18 - will print no ROM basic message, and ask user to retry the boot. If TESTS flag is uncommented in the makefile it will start tests. - Major rbios.asm cleanup: - Moved all tests to tests.asm - Removed various UART I/O functions that are not used anymore (I hope that cprintf is good enough for everything) - Interrupt vectors initialization: - All vectors are initialized to an empty (iret) ISR - Used vectors then populated using the definitions from interrupt_table - Small change in getting UART bit rate from NVRAM - now it is done using nvram_get_video function. - day05.c is renamed to nvram.c - Cleanup - Add inttrace.asm - implements int_trace function that prints all registers. This function should be called for debugging purposes upon entering or exiting an ISR. If BIOS is compiled with TRACE flag uncommented in the makefile, unimplemented interrupts will call this function (so we can figure out what interrupts programs are trying to use) - Fixed a problem (incorrect indexing in the stack) in Int 12h implementation that prevented MS-DOS from booting (it still doesn't boot to the command line, but at least it continues reading disk much longer). Changes for BIOS029B: - Floppy service - DMA TC fix from John Coffman Changes for BIOS027A: - Implemented UART autodetection - Detects 8250, 16450, 16550, 16550A and 16750 (TI) UARTs. - Automatically enables FIFO on 16550A and better. - Tested with GM16C450 (Goldstar, no FIFO), TL16C550CN, and CM16C550P (TI and California Micro Devices CMOS versions of 16550A, with FIFO) - I'll try to test it with TL16C750 (need to build a PLCC to DIP40 adapter for this). - Moved UART initialization code to video_init (int10ser.asm). - Implemented UART speed configuration - Supports 1200, 2400, 9600, 19200, 38400, 57600 and 115200 Kbit/sec. - Default is 9600. - Configuration is stored in byte 5 of NVRAM (RAM_Serial) - All keyboard input is now done thru Int 16h. - Keyboard service (Int 16h) is now initialized early, right after UART and video initialization. - Updated NVRAM checksum calculation. - Checksum calculation alrorithm makes sure that checksum is 0x5A previously it was 0) - This is to avoid correct checksum in case NVRAM was completely erased - NVRAM setup is now running only if NVRAM checksum is invalid or if requested by user ('s' key pressed while setup message is displayed) - Various cleanups: - Get rid of uart.c and uart.h. uart.c was not used anyway, and only a few function declarations were used from uart.h. These were moved to sbc188.h. - main.c is not linked to the BIOS, its functionality is moved to rbios.asm. (All fuctionality except Print_Call_Trace - TODO). Changes for BIOS027A: This BIOS adds an implementation of Int 10h (video services) using a serial terminal as the output device and ANSI escape sequences. Following Int 10h functions are implemented: AH=00h - Set video mode Supports only text modes 0, 1, 2, 3, and 7 Note: this BIOS assumes 24 rows instead of 25 (as most terminals have only 24 rows) AH=01h - Set cursor shape Supports showing or hiding cursor only Testing note: Works in PuTTY, doesn't work in HyperTerminal AH=02h - Set cursor position AH=03h - Get cursor position and size AH=05h - Select active display page Note: Only sets BIOS area variable, terminals don't support page switching AH=06h - Scroll up window AH=07h - Scroll down window Note: Will scroll entire rows, terminals don't allow specifying columns for scrolling regions Testing note: Works in PuTTY, doesn't work in HyperTerminal AH=08h - Read character and attribute at cursor position Note: Always returns 20h (space) character and 07h (white on black) attribute AH=09h - Write character and attribute at cursor position AH=0Ah - Write character only at cursor position Note: Uses last specified attribute instead of the existing attributes AH=0Eh - Teletype output AH=0Fh - Get current video mode AH=13h - Write string Notes: - I modified uart_putchar to use int 10h/0Eh, so video BIOS can keep track of the cursor position. This might slow down the output a bit. - BIOS call tracing doesn't work with this BIOS. This happens apparently because it enters endless loop with calling int 10h/0Eh to print trace. - If BIOS was unable to read the boot record, a video BIOS test program will run. Keep pressing space (or any other key) to view various test outputs...