Stefan Lennerbrant
<4364>
· Text 523 · w8 · kommentar
1991-09-05 15:40
Ärende: Optionsprommets dataareor
Efter ett tags disassemblering (Z80MU på PC:n är oumbärlig - finns
i monitorn, även om jag gillar den äldre versionen bättre) kom
jag fram till följande:
IX+18 & IX+19: Pekar till parametrar (VSA30A72.77A osv) i options-RAM
IX+17 & IX+20: Flaggor mm, se nedan
IX+20 är den intressanta byten, som jag letat efter förut.
Om det är V24:, så är parametrar "VSA..." om IX+20 = 0x13
"TSA..." om IX+20 = 0x3e
Detta är bara betrakltelser, jag har inte försökt komma på teorierna
bakom ännu.
Dett medför att mitt efterlängtade program ser ut som så här:
10 Asm¤=CHR¤(123,205,43,0,221,229,225,201)
20 ! LD A,E : CALL 43 : PUSH IX : POP HL : RET
30 OPEN "V24:TSA30A72.77" AS FILE 1
35 OPEN "PR:" AS FILE 2
40 Ix=CALL(VARPTR(Asm¤),1) ! Adress till IX-map
50 ON ERROR GOTO 80
60 GET #1,A¤ ! Starta emulatorn
70 GOTO 90
80 RESUME 90
90 POKE Ix+20,19
100 GET #1,A¤
110 IF A¤<>CHR¤(3) PUT #2,A¤ : GOTO 100
120 POKE Ix+20,62
130 GOTO 50
Detta är en terminalemulator med möjlighet till lokal utskrift på
skrivare.
Om värddatorn skickar CHR¤(2) två gånger så avbryts GET #1,A¤ på
rad 60 och med POKE Ix+20,19 ätter vi om V24: till VSA...
Vi kan då hämta tecken efter tecken och skicka till skrivaren
Nä'r värden är klar (tex genom att skicka CHR¤(3), rad 110)
sätter vi med POKE Ix+20,62 om V24: till emulering igen.
Jag har förut gjort samma sak (lite utförligare, tex bör man
kolla om användaren trycker på en knapp under printerutskriften
och skicka den till värddatorn) men då använt mig av
CLOSE 1 och OPEN "V24:VSA..." AS FILE 1 istf POKE Ix+20,...
Detta medför tyvärr att bufferten flushas och man tappar tecken om
inte värddatorn ser till att vänta någon sekund efter det att
CHR¤(2) resp CHR¤(3) har skickats.
Med ovanstående metod går det astt få en transparent emulering
på ett mycket bra sätt.
Användaren kan fortsätta att skriva obehindrat på tangentbordet ävenm
när lokal utskrift är på (rad 100 och 110 ovan) - Mycket imponerande!
Kan någon säga varför man måste skicka två CHR¤(2) för att komma ur
terminalemuleringen - tecknet efter det första CHR¤(2) försvinner
bara ut i tomma intet (Man kan naturigtvis skicka något annat tecken
än CHR¤(2) efter det första CHR¤(2):et)
Dessutom händer det ofta att ett tryck på PF-tangenten (som ger ERRCODE
och avbryter GET #1,A¤ på rad 60) "hänger" datorn så att man måste
tryka på Ctrl-C för att återfå kontrollen
Det blev ett rätt så långt inlägg det här, men jag blev så glad över
att det funkar, så fingrarna rusade iväg.
Finns det någon nackdel eller fara med att göra på ovanstående sätt?
Ska andra värden ändras också, förutom Ix+20
/stl