SVI-738 X'Press CP/M patches H.J.C. Otten De X'Press biedt naast een uitstekende MSX omgeving een prima CP/M operating systeem. Daar maak ik veel gebruik van, want niet alle CP/M software wil onder MSX-DOS draaien, vooral de wel handige maar niet altijd netjes geschreven public domain utilities. De SVI-738 CP/M implementatie is een goed stuk werk. Zo'n implementatie bestaat voor een fabrikant in principe alleen maar uit het schrijven van de BIOS, de rest van de CP/M operating systeem software is hardware onafhankelijk. Ook Spectravideo heeft een speciale en goed werkende BIOS geschreven. Toch had ik door mijn gebruik van de SVI-738 een paar wensen, ook naar aanleiding van de mogelijkheden die MSX-DOS biedt en CP/M niet zonder meer. Met de BIOS listings en de public domain disk editor DU ben ik er in geslaagd een aantal van mijn wensen uit te voeren: 1. Autoboot, bij het opstarten wordt automatisch een programma opgestart. 2. Andere default instelling RS-232-C interface na boot 3. Gebruik terminal via RS-232-C als console. Het BAT: device biedt dit, maar dan raak je de printer kwijt en de diskdrive blijft lopen. 4. Een versnelde automatische herhaling van een ingedrukte toets. 5. Het naar wens kunnen veranderen van de functietoets display (aan/uit, invers of gewoon) 6. Default instelling IOBYTE om bijvoorbeeld 80 kolommen display als default te krijgen. 7. Omschakelen tussen ADM-3A of VT-52 vanuit programma of automatisch als ADM-3A terminal 8. Backspace en delete toetsen wissen vorige karakter op scherm inplaats van echo. De volgende patches op de CP/M BIOS hebben bovenstaande mogelijkheden verwezenlijkt. Als de CP/M versie niet 2.28 is en niet de X'PRESS versie 2.1 zijn onderstaande patches niet zonder meer aan te brengen! Test alles op een werk diskette! Ervaring met CP/M is niet echt nodig om alle patches uit te voeren, maar doe dit NOOIT op de originele CP/M disk. Het is wel nodig om de disk utility DU, bijvoorbeeld de wijdverspreide versie DU-V87, te gebruiken, alle volgende patches zijn met DU commando's geillustreerd. Alles tusssen haakjes is overigens commentaar en hoeft dus niet te worden ingevoerd. Autoboot Bij CP/M is een automatisch opstarten van een programma na een boot niet zonder meer mogelijk. Wel is de CCP in staat een commando uit te voeren als dit in de commando buffer wordt gevonden. Autoboot is dus mogelijk door op de disk in de daaropgeslagen CCP een commando in te brengen. Na het in het geheugen brengen gaat de CCP daarmee aan het werk. Nadeel daarvan is dat dat gebeurt zowel bij een cold boot (na een systeem reset) als na een warm boot (Control-c indrukken of het gewone einde van een programma). Niet altijd is dat aantrekkelijk. Daarom moet ook in de BIOS worden ingegrepen om na een warm boot het commando te verwijderen uit de zojuist ingelezen CCP voordat de CCP wordt opgestart. De volgende twee procedures bereiken dit effect. a. Inbrengen van een CCP commando op de disk. Als voorbeeld kiezen we voor het activeren van het programma HULP.COM mbv het commando HULP. Elk geldig commando (ook batch) is natuurlijk bruikbaar. A>DU : T1;S29 (track 1, sector 29) : CH7,4 (byte 7 bevat lengte commando) : CA8,HULP (commando, in UPPERCASE!!) : CHC,0 (sluit af met 0) : W (bewaar!) Na elke cold en hard boot zal het commando HULP worden uitgevoerd. Handig om een gebruiker op te sluiten binnen een applikatie waarin andere applikaties worden opgestart. b. Geen autoboot na warm boot. Wijzigen BIOS op disk: A>DU : T0;S7 : CH58,CD,19,E6,AF,32,07,CC,C9 : W : T0;S12 : CH52,58,E3 De eerste patch voegt in een vrije patch ruimte het volgende programma fragment toe: PWARM CALL BOTDOS ; original call E358 CD 19 E6 XOR A AF LD (CCP+7),A ; zero command count 32 07 CC RET C9 De tweede patch vervangt op lokatie E5D1 de call van BOTDOS naar de patch. 2. Andere default instelling RS-232-C interface na boot Om een andere instelling van de RS-232-C interface mogelijk te maken is het alleen nodig de initiele in de 8253 CTC geladen baudrate te veranderen en het status woord wat in de 8251 USART wordt geladen. Waarden voor baudrate in hexadecimaal: baud teller 75 600 300 180 (huidige default, 358 decimaal) 1200 60 4800 18 9600 12 (uit MSX Technical Reference) Patch BIOS op disk voor bijvoorbeeld 4800 baud default E5E3 LD HL,180 naar LD HL,18 A>DU-V87 : T0;S12 : CH64,18,0 8001 : W Ander statuswoord geen pariteit, 1 stopbit, 8 bit (default is oneven pariteit, 8 bit, 2 stopbit) 0 1 0 0 1 1 1 0 = hex 4E ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ - \ klok gedeeld ! ! ! ! ! ! \ - / door 16 ! ! ! ! ! ! ! ! ! ! ! \ --- \ 8 bit ! ! ! ! \ ----- / ! ! ! ! ! ! ! \-------- parity disabled (was 1 = enabled) ! ! ! ! ! \ --------- odd parity (ignored) ! ! ! \------------ \ 1 stopbit (was 11 = 2 stopbit) \-------------- / Patch de BIOS op disk als volgt: E60C LD A,DE naar LD A,4E A>DU-V87 : T0;S13 : CHD,4E DE : W 3. Gebruik terminal via RS-232-C als console. Handig als je een apart beeldscherm of een als terminal werkende computer wil gebruiken. Het BAT: device biedt dit, maar dan raak je de printer kwijt en de diskdrive blijft lopen. Na de volgende patches te hebben aangebracht is het volgende commando nodig om alle in- en uitvoer via de RS-232-C te laten verlopen: A> STAT CON:=BAT: Om weer terug te schakelen naar het toetsenbord en video van de X'Press moet (natuurlijk op het op de RS-232-C aangesloten beeldscherm) worden ingevoerd: A> STAT CON:=UC1: a. Veranderen BAT: uitvoer naar RS-232-C ipv naar LST: (via STAT LST:=UL1: is dat al mogelijk, maar dan is de printer niet meer bruikbaar) Patch de BIOS als volgt: CP 02H ; is IOBYTE assignment CON: BAT:? E8A5 JP Z,LIST1 ; do LST: output naar JP Z,RS232a (=EB37) A>DU-V87 : T0;S18 : CH26,37,EB : W b. De disk drive motor blijft draaien als de invoer voor CON: via BAT: van de RS-232-C komt. Dit wordt veroorzaakt door het disabled zijn van de interrupt van de VDP elke 20 ms. In elke interrupt afhandeling wordt een teller afgeteld en bij het bereiken van de waarde nul wordt de disk drive motor uitgezet. Dit kan worden opgelost door tijdens het wachten op de invoer van de RS-232-C poort even de interrupts toe te laten. Daartoe is de volgende programma patch geschikt: FB PBAT EI 00 NOP 00 NOP ; geef de interrupt een kans F3 DI CD 2A E7 CALL BATST ; invoer klaar? 28 E7 JR Z,PBAT C3 JP BATIN+5 ; terug naar oorspronkelijke routine en voor activeren de oorspronkelijke code veranderen in: C3 60 E3 BATIN JP PBAT ; (was CALL BATST) (hierachter staat JP Z,BATIN) BATIN begint op adres EB62 Voor PBAT is plaats in de patchruimte na PWARM (zie terug) beginnend op adres E360 Aanbrengen van deze patch op de BIOS op disk: A>DU-V87 : T0;S7 : CH60,FB,0,0,F3,CD,2A,E7,28,F7,C3,67,EB : W : T0;S23 : CH62,C3,60,E3 2A E7 : W 4. Een versnelde automatische herhaling van een ingedrukte toets Het automatisch herhalen van een ingedrukte toets qua snelheid wordt geregeld door een teller waarvan de beginwaarde op lokatie E765 is te vinden. E765 LD A,6 ; repeat count Een versnelling wordt verkregen door deze beginwaarde lager te kiezen. De waarde 2 werkt een stuk aangenamer. Patch op disk met A>DU-V87 : T0;S15 : CH65,2 06 : W 5. Het naar wens kunnen veranderen van de functietoets display (aan/uit, invers of gewoon) Dit is een niet op de disk aanwezige BIOS aan te brengen patch, want dit willen we aan en uit kunnen zetten. De volgende voorzieningen kunnen hiervoor worden gebruikt. - inverse achtergrond wordt geregeld door de inhoud van lokaties F509 = FF F516 = FE door deze lokaties op nul te stellen wordt de inverse achtergrond verwijderd, na het aanroepen van de routine die de video processor initialiseert hiervoor Deze routine is te vinden op lokatie F4FD, aan te roepen als subroutine. - onderdrukken van tonen van control-characters wordt geregeld door de inhoud van lokatie F59F. Daar staat nu hex 14 (wat foutief is, control-characters lopen door tot hex 20...) Door hier 7F neer te zetten wordt alle uitvoer onderdrukt doordat spaties worden getoond. Ook de bovenstaande subroutine F4FD maakt dit aktief. Bovenstaande informatie kan in programma's worden gebruikt en ook als losstaande programma's. De onderstaande twee programma's maken hier gebruik van: KEYOFF.COM START XOR A 0100 AF LD (F509),A 32 09 F5 LD (F516),A 32 16 F5 LD A,07FH 3E 7F LD (F59F),A 32 9F F5 CALL 0F4FDH CD FD F4 JP 0000 C3 00 00 KEYON.COM Zet functie display aan START LD A,0FFH 0100 3E FF LD (F509),A 32 09 F5 LD A,0FEH 3E FE LD (F516),A 32 16 F5 LD A,020H 3E 20 LD (F59F),A 32 9F F5 CALL 0F4FDH CD FD F4 JP 0000 C3 00 00 Met DDT is dit gemakkelijk in te voeren: voor bijvoorbeeld KEYON.COM A>DDT -S100,3E,FF,32,09,F5,3E,FE,32,16,F5,3E,20,32,9F,F5,CD,FD,F,C3,00,00 -^C A>SAVE 1 KEYON.COM De tekst van de functietoetsen staat in het geheugen vanaf lokatie E39B achtereenvolgens voor functietoets 1 tot 10, per toets is de tekst is 16 (dec) karakters lang. Op disk is dit te vinden in track 0, sector 35 en 36. 6. Default instelling IOBYTE om bijvoorbeeld 80 kolommen display als default te krijgen. Het initiele IOBYTE staat op adres E55D en bevat de waarde 81. Op disk staat het IOBYTE in track 0, sector 11 Verander bv. in 80 kolommen voor CON en centronics voor printer als volgt: A>DU-V87 : T0;S11 CH5D,83 81 : W Het IOBYTE heeft bij de SVI de volgende betekenis: bit 1 en 0 : CON: device invoer uitvoer 0 0 = TTY toetsenbord 80 kolommen 0 1 = CRT toetsenbord 40 kolommen 1 0 = BAT RDR LST 1 1 = UC1 toetsenbord 80 kolommen bit 3 en 2 RDR 0 0 = TTY rs232c ! dus niet 40 kolommen 0 1 = PTR rs232c 1 0 = UR1 rs232c 1 1 = UR2 rs232c bit 5 en 4 PUN alleen uitvoer 0 0 = TTY rs232c ! dus niet 40 kolommen 0 1 = PTP rs232c 1 0 = UP1 rs232c 1 1 = UP2 rs232c bit 7 en 6 LST alleen uitvoer 0 0 = TTY 80 kolommen 0 1 = CRT 40 kolommen 1 0 = LPT centronics 1 1 = UL1 rs232c 7. Omschakelen ADM-3A naar VT-52 vanuit programma of als default. CP/M laat toe om als VT-52 of als ADM-3A terminal te fungeren. Met het programma TERMTYPE.COM is dit in te stellen maar het kan ook door een vlag in de BIOS te veranderen. Het adres van de vlag is E23C. Als hier 0 staat reageert de 80 kolommen uitvoer als VT-52, anders als ADM-3A Op disk is dit track 0, sector 5, offset 3C en de al ingevulde waarde is 00. Voor default ADM-3A naar FF patchen. 8. Backspace en delete toets wissen voorgaande karakter. Inplaats van een echo en een schuine streep zie ik liever het vorige karakter worden gewist als ik op de Backspace en delete toets druk. Dit is een probleem in de CCP wat al eens is opgelost door Lewis Moseley in 1981. De door hem aangeven patch is als volgt: ORG CCP + 0A1BH JMP CCP + 0A07H Bij de SVI-738 begint de CCP op adres CC00, wat terug te vinden is op disk in track 2 sector 13 offset 1B: A>DU-V87 :T2;S13 :CH1B,C3,07,D6 Mochten er nog vragen zijn of durft U het niet zelf aan om deze patches aan te brengen, neem dan kontakt op. Hans Otten