home *** CD-ROM | disk | FTP | other *** search
/ Brotikasten / BROTCD01.iso / exoten / msx / msx099b1.arj / GETROM.BAS < prev    next >
BASIC Source File  |  1994-11-01  |  3KB  |  65 lines

  1. 10 '
  2. 20 ' Program to get ROMs for the MSX emulator
  3. 30 ' (c) 1994 CompuJunks
  4. 40 '
  5. 50 KEY OFF:CLS
  6. 60 GOSUB 460
  7. 70 FOR I=&HD000 TO &HD026:READ A$:POKE I,VAL("&H"+A$):NEXT
  8. 80 DEFUSR=&HD000:SS=PEEK(&HFFFF) XOR 255:PS=INP(&HA8)
  9. 90 'IF PEEK(&H2D) <> 0 THEN GOTO 420'is it MSX-1 ?
  10. 100 '
  11. 110 ' MSX BIOS & BASIC
  12. 120 '
  13. 130 ADR=PEEK(&HFCC1)' address of main ROMs: BIOS & BASIC
  14. 140 PRINT"BIOS and BASIC in slot";
  15. 150 IF (ADR AND &H80) = &H80 THEN PRINT ADR AND 3;"-";:T=ADR AND &HC:POKE &HD00B,(SS AND &HF0) OR (T OR (T / 4)):PRINT T / 4 ELSE PRINT ADR AND 3:POKE &HD00B,SS
  16. 160 POKE &HD010,(PS AND &HF0) OR ((ADR AND &H3) OR ((ADR AND &H3)*4))
  17. 170 POKE &HD015,0:PRINT"Fetching and saving BIOS: MSXBIOS.ROM":A=USR(0):BSAVE "MSXBIOS.ROM",&H9000,&HCFFF
  18. 180 POKE &HD015,&H40:PRINT"Fetching and saving MSX-BASIC: MSXBASIC.ROM":A=USR(0):BSAVE "MSXBASIC.ROM",&H9000,&HCFFF
  19. 190 '
  20. 200 ' DISK-ROM/DISK-BASIC
  21. 210 '
  22. 220 IF PEEK(&HFFA7) = &HC9 THEN PRINT"There's no disk adapter present":GOTO 320
  23. 230 I=&HFB21:IF PEEK(I) <> 0 THEN GOTO 240 ELSE IF I < &HFB27 THEN I=I+2:GOTO 230 ELSE PRINT "Found disk adapter... but no drives connected ?!":GOTO 320
  24. 240 ADR=PEEK(I+1)' address of first disk ROM
  25. 250 PRINT PEEK(I);"drives connected to disk adapter and DISK-ROM in slot";
  26. 260 IF (ADR AND &H80) = &H80 THEN PRINT ADR AND 3;"-";:T=ADR AND &HC:POKE &HD00B,(SS AND &HFC) OR T:PRINT T / 4 ELSE PRINT ADR AND 3:POKE &HD00B,SS
  27. 270 POKE &HD010,((PS AND &HFC) OR (ADR AND &HC))
  28. 280 POKE &HD015,&H40:PRINT"Fetching and saving DISK-ROM: MSXDISK.ROM":A=USR(0):BSAVE "MSXDISK.ROM",&H9000,&HCFFF
  29. 290 '
  30. 300 ' MSX-2 subROM
  31. 310 '
  32. 320 ADR=PEEK(&HFAF8)' address of MSX-2 subROM
  33. 330 PRINT"MSX-2 subROM in slot";
  34. 340 IF (ADR AND &H80) = &H80 THEN PRINT ADR AND 3;"-";:T=ADR AND &HC:POKE &HD00B,(SS AND &HF3) OR T:PRINT T / 4 ELSE PRINT ADR AND 3:POKE &HD00B,SS
  35. 350 POKE &HD010,((PS AND &HF3) OR (ADR AND 3))
  36. 360 POKE &HD015,&H0:PRINT"Fetching and saving MSX-2 subROM: MSX2SUB.ROM":A=USR(0):BSAVE "MSX2SUB.ROM",&H9000,&HCFFF
  37. 370 END
  38. 380 DATA F3,DB,A8,F5,3A,FF,FF,EE,FF,F5
  39. 390 DATA 3E,AC,32,FF,FF,3E,F0,D3,A8,21
  40. 400 DATA 00,00,11,00,90,01,00,40,ED,B0
  41. 410 DATA F1,32,FF,FF,F1,D3,A8,FB,C9
  42. 420 PRINT "This is not a MSX-1 machine, you'll have to get the MSX-1 BIOS":PRINT"and BASIC from a real MSX-1 machine.":PRINT"The diskROM however can probably be fetched from a non-MSX-1 machine":PRINT:GOTO 220
  43. 430 '
  44. 440 ' This is merely information. The program does nothing with the results
  45. 450 '
  46. 460 PRINT "The following information is only to inform you about what's inside your MSX"
  47. 470 PRINT"You could e.g. use it to verify the slot addresses this programs uses"
  48. 480 PRINT"to fetch the ROMs"
  49. 490 PRINT
  50. 500 PS=0:PC=0:SS=0:FOR I=&HFCC9 TO &HFD09 STEP 4
  51. 510 FOR J=0 TO 3
  52. 520 S=PEEK(I+J)
  53. 530 IF (S AND &H80) = &H80 THEN N$="BASIC program":GOSUB 610
  54. 540 IF (S AND &H40) = &H40 THEN N$="device handler":GOSUB 610
  55. 550 IF (S AND &H20) = &H20 THEN N$="CALL handler":GOSUB 610
  56. 560 NEXT
  57. 570 SS=SS+1:PC=PC+1:IF PC = 4 THEN PS=PS+1:SS=0:PC=0
  58. 580 NEXT
  59. 590 PRINT
  60. 600 RETURN
  61. 610 PRINT "SLOT";PS;
  62. 620 IF PEEK(&HFCC1+PS) = &H80 THEN PRINT "-";SS; ELSE PRINT "    ";
  63. 630 PRINT "PAGE";J;" contains ";N$
  64. 640 RETURN
  65.