diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index af9d03ee..9b11978c 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -2290,6 +2290,72 @@ place holder placeholder +Diagnostics +-------- + +### DIAG + +Progress through the boot and initialization process can be difficult to monitor +due to the lack of console or video output. Access to these output devices does +not become available until late the in the boot process. If these output devices +are also involved with the issue trying to be resolved then trouble shooting is +even more difficult. + +ROMWBW can be configured to display boot progress with the assistance of additional +hardware. This take the form of an LED breakout debugging board connected to an +8-bit output port. As the boot code executes, the LED output display is updated. + +To us an LED breakout board, it must be connected the computers data, reset and port +select lines. + +To enable the DIAG option the following settings must be made in the systems .ini +configuration file, where 0xnn is the port address. + +DIAGENABLE .SET TRUE +DIAGPORT .SET 0xnn + +The following table shows the ROMWBW process steps in relation to the LED display. + +| LED | ROMWBW Processes | +| -------- |:---------------------------------------------- | +| `........` | Initial boot | +| | Jump to start address | +| | Disable interrupts | +| | Set interrupt mode 1 | +| | Initialize critical ports and initial speed | +| `.......O` | Setup initial stack | +| | Memory manager and CPU configuration | +| | Set top bank to be RAM | +| `......OO` | Get and save battery condition | +| | Install HBIOS proxy in upper memory | +| | If platform is MBC reconfigure memory manager | +| | Setup "ROMLESS" HBIOS image or ... | +| | Copy HBIOS from ROM to RAM if RAM flag not set | +| | Jump to HBIOS in RAM | +| | Set running in RAM flag | +| `.....OOO` | Finalize configuration for running in RAM | +| | Check battery condition | +| | Check for recovery mode boot | +| `....OOOO` | Identify CPU type | +| `...OOOOO` | Set cpu oscillator speed | +| | Setup counter-timers | +| | Setup heap | +| `..OOOOOO` | Preconsole initialization | +| `.OOOOOOO` | Boot delay | +| | Set boot console device | +| | Bios announcement | +| `OOOOOOOO` | Display platform information | +| | Display memory configuration | +| | Display CPU family | +| | Verify ROM checksum | +| | Report battery condition | +| | Perform device driver initialization | +| | Report watchdog status | +| | Mark HBIOS heap so it is preserved | +| | Switch from boot console to CRT if active | +| | Display device summary | +| | Execute boot loader | + `\clearpage`{=latex} diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index af3e03c5..4bb00aa7 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1334,8 +1334,10 @@ Z280_INITZ: ; NOT WANT TO EFFECT RAM UNTIL AFTER THE BACKUP BATTERY STATUS CHECK ; IS PERFORMED NEXT. ; +#IF (DIAGENABLE) LD A,%00000011 OUT (DIAGPORT),A +#ENDIF ; ; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE ; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT. @@ -1354,7 +1356,7 @@ Z280_INITZ: ; WILL NOT START CORRECTLY WHEN THEY CHECK THE ROM ID VERSION BYTES. ; THE BATTERY CONDITION VALUE IS TEMPORARILY STORED AT HBX_LOC - 1 ; BECAUSE WE ARE CURRENTLY RUNNING IN ROM. AFTER WE TRANSITION HBIOS -; TO RAM, THE VALUE IS MOVED TO IT'S REAL LCOATION AT HB_BATCOND. +; TO RAM, THE VALUE IS MOVED TO IT'S REAL LOCATION AT HB_BATCOND. ; IF THERE IS NO DS1210 IN THE SYSTEM, THE CODE BELOW DOES NO HARM. ; LD HL,HBX_LOC - 1 ; POINT TO BYTE @@ -1660,7 +1662,7 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK ; THAT. LD SP,HBX_LOC - 2 ; RESET STACK ; - ; NOTIFY THAT WE MADE THE TRANSTION! + ; NOTIFY THAT WE MADE THE TRANSITION! DIAG(%00000111) LED(%00000010) ;