I've been able to boot with a different device, still on Nextor 2.10; The only difference I've noticed are a few more bytes free in basic, are these few bytes the reason why it would/wouldn't boot?
On a Panasonic 2+ machine I get "MSX-Engine: NOT FOUND", does this mean only the older S3527 and S1985 are detected?
And still I get a "Modified MSX2", how do you detect that? Hardcoded values?
Not sure about the STX error issue. I'll keep the number of free BASIC bytes in mind.
Only S3527 and S1985 are really detected. S1990 is coupled to Turbo-R. Other engines I do not have any info on.
Is your Panasonic 2+ still original. I have both a WX and WSX, afaik if shows 2Plus on these. I'll re-check.
I can try if you want.
If you meant about the MSX-DOS version. I'll keep that on the back burner. thx.
Is your Panasonic 2+ still original. I have both a WX and WSX, afaik if shows 2Plus on these. I'll re-check.
No no, sorry the Panasonic 2+ is correctly identified.
The message "Modified MSX2" comes out on other modded MSX2s that have full Japanese settings and Bioses and I wanted to know what else is different.
More robust Opl4 check
OPL4_WAVE_ADDR EQU 07Eh OPL4_WAVE_DATA EQU 07Fh WVE_DEVICE_ID EQU 2 Opl4CheckDevice: ; OUT z = Opl4 Found ; nz = Opl4 not found LD A,WVE_DEVICE_ID OUT (OPL4_WAVE_ADDR),A PUSH BC POP BC ; Wait IN A,(OPL4_WAVE_DATA) AND A,%11100000 ; And device ID CP A,%00100000 ; Is opl4 present? RET
SRAM check
ReadRegister: ; Input C = register ; Output A = Value LD A,C OUT (OPL4_WAVE_REG_SELECT),A PUSH BC POP BC IN A,(OPL4_WAVE_REG_DATA) RET WriteRegister: ; Input C = register ; A = Value EX AF,AF LD A,C PUSH BC POP BC OUT (OPL4_WAVE_REG_SELECT),A EX AF,AF PUSH BC POP BC OUT (OPL4_WAVE_REG_DATA),A RET SetSramAddress: ; Input : EHL - Opl4 ram addres LD C,2 ; ENABLE SRAM ACCESS LD A,10001B CALL WriteRegister INC C LD A,E AND 111111B CALL WriteRegister INC C LD A,H CALL WriteRegister INC C LD A,L CALL WriteRegister LD A,6 OUT (OPL4_WAVE_REG_SELECT),A LD C,OPL4_WAVE_REG_DATA RET GetSramSize: ; Output HL = Size of sram in KB LD HL,0 ; Loop door SRAM heen in blokken van 64kB LD B,020h ; Maximaal 32 blokken van 64kB aanwezig (=2MB) .writeLoop LD A,B ; B loopt van 32 tot 1 ADD A,01Fh LD E,A ; E loopt van 32 tot 63 (sla eerste 2MB ROM over) CALL SetSramAddress ; Schrijf SRAM adres in Wave registers LD C,06h LD A,B CALL WriteRegister ; Schrijf waarde B (32 - 1) in 1e byte van SRAM DJNZ .writeLoop ; Volgende 64kB SRAM blok LD D,B ; D=0 (is maximaal aantal aanwezige 64kB blokken) LD B,020h ; Controleer alle 32 SRAM blokken .readLoop LD A,B ADD A,01Fh LD E,A ; Zie boven CALL SetSramAddress ; Scrijf SRAM adres in Wave registers LD C,06h CALL ReadRegister ; Lees waarde uit 1ebyte van huidige SRAM blok CP B ; Gelijk aan wat er oorspronkelijk ingezet is? JR Z,.valueEqual LD D,0 ; Nee, dan maak D weer nul JR .nextBlock ; Controleer volgende blok .valueEqual LD A,D ; Wel de juiste waarde? Dan: OR A ; Als het VORIGE blok een foute waarde teruggaf... JR NZ,.nextBlock ; ...dan is het huidige blok het eerst mogelijke LD D,B ; juiste SRAM blok; in D .nextBlock DJNZ .readLoop ; Controleer volgende SRAM blok SRL D ; Minimale blok eenheid is 128kB LD L,0 LD H,D SRL H RR L RET
More robust Gfx9000 check:
G9K_VRAM EQU 60h ; R/W G9K_REG_DATA EQU 63h ; R/W G9K_REG_SELECT EQU 64h ; W G9K_WRITE_ADDR EQU 0 ; W G9K_READ_ADDR EQU 3 ; W SetVramWrite: ; Function : Sets Vram write address ; Input : E:HL VRAM address ; Output : none ; Modifies : A,C LD A,G9K_WRITE_ADDR OUT (G9K_REG_SELECT),A LD C,G9K_REG_DATA OUT (C),L OUT (C),H OUT (C),E RET SetVramRead: ; Function : Sets Vram read address ; Input : E:HL VRAM address ; Output : none ; Modifies : A,C LD A,G9K_READ_ADDR OUT (G9K_REG_SELECT),A LD C,G9K_REG_DATA OUT (C),L OUT (C),H OUT (C),E RET Detect: ; Input : none ; Output : Z=detected , NZ=not detected ; Modifies : A,C,E,H,L,F LD E,0 LD H,E LD L,E CALL SetVramWrite LD A,0A2h OUT (G9K_VRAM),A LD E,0 LD H,E LD L,E CALL SetVramRead IN A,(G9K_VRAM) CP A,0A2h RET
MegaReport running on WebMSX
The line between the logo and the information does weird things sometimes. Could that be an emulation issue?
Funny to see it's recognized as a FA-A1ST in Tr mode.
More robust Opl4 check
Thanks, the device ID check is already there. I'll play around with your SRAM code on OpenMSX and put it in the next release.
MegaReport running on WebMSX
The line between the logo and the information does weird things sometimes. Could that be an emulation issue?
Funny to see it's recognized as a FA-A1ST in Tr mode.
Cool, on what emulated type is it running?
One minor wish: Can you please disable key click? Now it keeps clicking until the keyboard buffer gets full.
More robust Opl4 check
Thanks, the device ID check is already there. I'll play around with your SRAM code on OpenMSX and put it in the next release.
I doubt that OpenMSX emulates the behavior properly. The reason why the check can fail is because the last byte written is read back regardless if there is SRAM connected or not. That is why the check is written like this