[Goupil G4] Moniteur/BIOS : liste des commandes

Pour tout ce qui touche au PC d'IBM et ses nombreux descendants. Attention tout de même, au delà de quelques MHz la discussion devient vite hors sujet.

Modérateurs : Carl, Papy.G, fneck

gotcha
Messages : 1530
Inscription : 30 mars 2017 11:39
Localisation : Isère

[Goupil G4] Moniteur/BIOS : liste des commandes

Message par gotcha »

Lorsqu'on boote un Goupil G4, on arrive sur le moniteur en cas de problème de boot sur le disque dur par exemple.
Dans mon cas, j'ai l'affichage suivant:

Code : Tout sélectionner

G4MON-186 V1R4
+
Le moniteur offre alors des commandes pour interagir avec la mémoire et certains périphériques.

Pour comprendre les différentes commandes du moniteur (qui ne sont pas décrites dans le technical manual), j'ai dû désassembler en partie la ROM de mon Goupil G4. Ces commandes pourront éventuellement aussi aider pour les autres Goupils à base de processeur Intel (G3 et G5 ?).

Il est aussi à noter que le moniteur est accessible via l'interruption int18h (qui sur les PC IBM corresponds au ROM BASIC loader).

Notes:
  • La version du moniteur analysé est : G4MON-186 V1R4. Si quelqu'un a un dump de la ROM pour un autre G4, je suis preneur pour voir les différences.
  • Ce travail est un 'work-in-progress'; je compléterai ce message au fur et à mesure.
  • J'ai écrit en anglais pour être cohérent avec la langue du moniteur
=======================
Base
=======================

[ <something> ] : means that <something> is optional
( <something> )+ : means a list of <something> with at least one element

<DecimalByte> : 8 bit decimal value
<HexByte> : 8 bit hexadecimal value
<HexWord> : 16 bit hexadecimal value
<HexAddress> : [ <HexWord_Segment> ':' ] <HexWord_Offset>


=======================
Int13h interface
=======================

Setup

DRV <HexByte>
Set the drive id for the int13h command

HD <HexByte>
Set the head id for the int13h command

CYL <DecimalWord>
Set the cylinder for the int13h command

SEC [<DecimalByte>]
Set the sector id for the int13h command
Set it to 1 if no parameter ggiven

CNT [<DecimalByte>]
Set the number of sectors for the int13h command.
Set it to 1 if no parameter ggiven

TA <HexAddress>
Set the int13h target buffer parameter
Default address is 2000:0000
Note that when only the offset is given, the previous segment, is taken.

Query

DK?
Print int13h parameter set (all in hexadecimal):
Req (B) : Int13h function
RC (B) : Returned status
Drv (B) : Drive ID
Cyl (W) : Cylinder
Hd (B) : Head
Sec (B) : Sector
Cnt (B) : Num of sectors to read
Ta (W) : Target buffer address segment
: (W) : Target buffer address offset

Commands

RD
Call int13h for a Read command on the disk system

WR
Call int13h for a Write command on the disk system

DK <HexByte_command> ?
Call Int13h with the parameters already set.
If the command is passed as parameters, it is used for as int13 command.
In case of error, the function prints int13h parameters and return status.


=======================
Memory operations
=======================

D [ <HexAddress_Start> [ <HexWord_EndOffset>] ]
Memory dump command.
Accepts 2 optional operands:
- 1st is start address
- 2nd is end offset (included)
Default start address : 0000:0000
Default length is 80h bytes

E <HexAddress> ( <HexByte> )+
Copy the byte list to @ given by HexAddress

F <HexAddress_Start> <HexWord_EndOffset> ( [<i]HexByte[/i]> )+
Write the given list of bytes starting at StartAddress, repeat this list until EndOffset is written (included)
This command can be used to fill a memory area with a given pattern.

C <HexAddress_Start1> <HexWord_EndOffet1> <HexAddress_Start2>
Compare 2 buffers and print the bytes that differ ?
TO CHECK

=======================
IO
=======================

I <HexWord_PortAdrdess>
Read a byte from port and print it to the screen

IW <HexWord_PortAddress>
Read a word from port and print it to the screen

O <HexWord_PortAddress> ( <HexByte_Value> )+
Perform a out of the byte values to the port address

OW <HexWord_PortAddress> ( <HexByte_Value> )+
Perform a out of the word values to the port address

SLOAD <HexAddress_Target> <Hex???_NumBytes>
Reads the specified number of bytes from the serial port and store in the target address.
TODO: the serial port ID is in 0000:0527. How is it set ? by the BIOS Post ???


=======================
Other
=======================

CALLF <HexAddress>
Call the subroutine whose address is given in parameter

RES
Perform a cold boot of the computer

BOOT
Boot from disk system (int19h)

BO
Boot from disk system (int19h)

R
TODO

H
Supposed to be for the help, but there is no help

?
Supposed to be for the help, but there is no help

Q
Not implemented
Amstrad CPC addict :mrgreen:
Répondre