My pcs did not have serial ports. I have to look, what a UDS-10 device is, to verify this option. I downloaded a pdf how the data on a .hfe-file is stored, but I did not understand a single word. Using Mess, saving on a pc99 disks, converting them to .hfe-files swapping SD-cards would not be the worst solution, I am thinking.
Anyhow, I did not understand the cru magic myself. Simon Koppelmann's TMS 9900 Assembler book helped me. I searched the rom of the EVPC for the character definitions with a hex monitor program. I am using the absolute address, but it would be better using a look up table to get the address inside the rom. Any existing dsr rom could be enabled in the manner LI R12,>1x00, Set cru Bit to One on position >1x00/2 (+ operand 0 is reading SBO 0) and you can use the data stored at >4xxx. So with your Geneve follow my advise and use a ram or rom destination inside your system. Do not use this cru "Hokuspokus".
Study your Geneve code to find the right address for port 3. Look were the "R17" data >91 is used to write data into other VDP registers. The code in the example above is not right. Change it to: UNTER1 MOVB *0+,*15.
One reminder concerning my code when we are using commands: the number of bytes in consecutive order written to port 3 are X-1. The missing byte hides in the setup for the used command. That is the reason why I have to do things twice in a slightly different way. Maybe someone provides us a better solution to this problem?
I think my printer cable is defect. Printing Hallo results in """"""""JCNNO. So OCR is no option for the moment. I copied the following code right away from the CRT. So we both have to remember the errors I made in the previous posts:
ST LWPI >B000
LI 12,>1400 this is 99/4A specific - skip this
SBO 0 and this
LI 2,>40E2 and adjust this to the first byte where your simple ASCII 0 definition starts
ASCII0 CLR 8 preparing R8
ASCII1 LI 3,HMMC3+8 using a new setup for the HMMC command
LOPO MOVB @LO,*3 clearing the location indicated by R3. Don't ask me if this is necessary.
CLR 4 set R4 to zero
LI 5,2 in one go we are shifting two bits
LI 6,3 times 3-1 (reason is the X-1 byte I was talking about above)+1 (the position of * DEC 6 instruction takes the responsibility here)
MOVB *2+,4 copies the first byte of ASCII code in R4
WIEDER SLA 4,1
JOC AN bit found?
LI 7,HINTER-1 no, nibble for background color start position -1
AUCHAN A 5,7 nibble +1 or 2 equals to @HINTER, @HINTER+1 or new @VORDER and @VORDER+1 in any * combination
AB *7,*3 nibble gets added to HMMC3+8
DEC 5 2 times?
JNE WIEDER no
JMP ERLEDI yes
AN LI 7,VORDER-1 nibble for pixel color start position - 1
JMP AUCHAN I changed this while I was copying the text. It saves the
* A 5,7 code
* AB *7,*3 here
* DEC 5 but
* JNE WIEDER the old "pasta code" runs faster on every bit that is set
ERLEDI BL @TSR2 test, if the VDP is busy. This might be obsolete?
MOVB @R36,*14 HMMC+8 holds the first byte needed for VR44
ERNEUT DEC 6 is R6 zero
JEQ NEUER than 3*2 bits are done?
INCT 5 no, so set R5 for an other two bits to shift
CLR 3 preparing R3
WIEDE2 SLA 4,1 see above but using R3 to get the data for VR44
AUCHA2 A 5,7
AN2 LI 7,VORDER-1
* A 5,7
* AB *7,3
* DEC 5
* JNE WIEDE2
ERLED2 BL @TR2 Important! Do not strip this.
JNE SCHLUS is HMMC3 done?
HALT2 BL @TR2 no, go and check SR2
COC @MA,9 needs the VDP a pause?
JNE HALT2 yes, than go to HALT2
MOVB 3,*14 no, copy byte into port 1
MOVB @R44,*14 assign it to the color register
JMP ERNEUT go and see, if there is an other byte in the queue
NEUER MOVB *2+,4 fetch the next byte from your basic char set definition
LI 6,4 again 3 +1
JMP ERNEUT an other round
SCHLUS AI 8,>0006 add 6 to the x position represented in R8
MOVB @>B011,@HMMC3 @>B011 equals to MyWorkspace+11 it is the low byte of R8
MOVB 8,@HMMC3+1 the high order bit of the x position
DEC 2 I have to adjust R2 here
CI 8,510 check if the x position is lower than #510. 85 chars per line
JL LOPO not done yet
CI 2,>48E3 I have had a counter here loaded with 3. 3*85=255 (0 to 254)chars in three rows. * My first thought was to add char 255 when the main loop is done. More pasta. * So I come up with this solution. The >48E3 was a little bit trial and error. * ASCII(255)*8+starting position of ASCII(0)+9. So, I didn't catch my logic for * myself. The disadvantage to the former solution is, that the routine is filling * the whole fourth line.
JH C255 Make sure that we are testing the >L bit to make this bulletproof
AB @PLUS8,@HMMC3+2 skip to the next row
CLR HMMC3 start with x position zero
JMP ASCII0 return. The JH C255 stops this routine
C255 SBZ 0 here comes your own stuff
ENDLOS JMP ENDLOS I am using my reset button here
*ENDE MOVB @G1,+1,@>83D4
* MOVB @G1,*14
* BL @UNTERP
* DATA G1,12
* B @>0000
UNTERP MOVB 13,*14 Videoregister 10010001 17 vorlegen
MOV *11+,1 DATA Werte abholen
UNTER1 MOVB *0+,*15 Daten in Port 3 unterbringen
JNE UNTER1 alle geschrieben?
B *11 Ja, dann geht es zurück
TSR2 MOVB @SR2,*14
TR2 MOVB @SR2,*14
MASK DATA >0100 der Befehl ist noch am ackern
MA DATA >8000 der VDP ist noch beschäftigt
G6 DATA >0A62,>3F00,>00F7,>3E07,>0A82,>0003
G1 DATA >00E0,>0020,>0006,>0007,>0802,>0000
LO DATA >0000,>0001,>0002,>D400,>FF00,>C0A6 sichtbaren Bereich mit Weiß füllen
R38 EQU LO+11
LI DATA >0000,>0001,>0002,>0000,>0900,>70AC ist aus dem Programm geflogen
LIX EQU LI+10
R44 EQU LI+11
R46 BYTE >AE
R36 BYTE >24
SR2 BYTE 2
R15 BYTE >8F
RS DATA >018E,>007A wird hier nicht mehr gebraucht
HMMC2 DATA >0000,>0001,>0600,>0800,>FF00,>F000
HMMC3 DATA >0000,>4001,>0600,>0800,>0000,>F000 This is your data pool. >4001 prints the chars on * screen. To hide the chars alter this values (byte 1 * and 2) >01 indicates the second page I am using with * G6 setup no sprites.
PLUS8 EQU HMMC3+6
VORDER DATA >0110 Schwarz
HINTER DATA >0000 Transparent
Well, I hope that I did not do any other copying errors.