MSX-BIOS I/O Listing

MSX  BIOS   Symbol  Table

MSX-BASIC-SCREEN

042C ABORT | 10F9 CKCNTC | 0A88 DELLN0
F847 ARG | FBD9 CLIKFL | FD99 DEVICE
F7B5 ARYTA2 | F3DB CLIKSW | F662 DIMFLG
F6C4 ARYTAB | F935 CLINEF | 0577 DISSCR
F40B ASCPCT1 | F3B2 CLMLST | F665 DONUM
F40D ASCPCT2 | F92A CLOC | F6B5 DOT
F931 ASPECT | F38C CLPRIM | 0A61 DOWN
F928 ATRBAS | 06A8 CLRSPR | 172A DOWNC
F3F2 ATRBYT | 0848 CLS | FCBD DRWANG
F6AA AUTFLG | F92C CMASK | FCBB DRWFLG
F6AD AUTINC | F936 CNPNTS | FCBC DRWSCL
F6AB AUTLIN | F3DE CNSDFG | F699 DSCPTR
F3EA BAKCLR | 08B0 CNVCH1 | F698 DSCTMP
FBB1 BASROM | 08B2 CNVCH2 | 0B2B DSPFNK
F3EB BDRCLR | 08B4 CNVCH3 | 1B63 DUTDLP
1113 BEEP | 089D CNVCHR | 0570 ENASCR
FC48 BOTTOM | FBCC CODSAV | 025E ENASLT
FCB2 BRDATR | F66A CONLO | 267F ENDBIOS
046F BREAKX | F668 CONSAV | F660 ENDBUF
3FDC BRKTXT | F666 CONTXT | F6A1 ENDFOR
F55E BUF | F669 CONTYP | F40F ENDPRG
FC18 BUFEND | F939 CPCNT | FFCA ENDWRK
F55D BUFMIN | F93B CPCNT8 | 026B ENESLT
06F9 CALATR | F938 CPLOTF | FBB0 ENSTOP
01FF CALBAS | F93D CRCSUM | 0989 ENTESC
022E CALESL | F3B1 CRTCNT | 0B15 ERAFNK
0205 CALLF | F3FC CS120 | F414 ERRFLG
06E4 CALPAT | F942 CSAVEA | F6B3 ERRLIN
0217 CALSLT | F944 CSAVEM | F6B7 ERRTXT
FCAB CAPST | F941 CSCLXY | FCC1 EXPTBL
FCB1 CASPRV | FCA9 CSRSW | F7F8 FACLO
F933 CENCNT | F3DD CSRX | F7C5 FBUFFR
F924 CGPBAS | F3DC CSRY | 1639 FETCHC
F91F CGPNT | F93F CSTCNT | F871 FILNM2
1BBF CGTABL | FCAA CSTYLE | F860 FILTAB
0F3D CHGCAP | F41C CURLIN | 0815 FILVRM
07F7 CHGCLR | F945 CXOFF | 13A9 FKTABL
10CB CHGET | F947 CYOFF | FCAE FLBMEM
084F CHGMOD | F7F6 DAC | F6A6 FLGINP
0F7A CHGSND | F6A3 DATLIN | FBCE FNKFLG
0D62 CHKBUF | F6C8 DATPTR | 0B26 FNKSB
02D7 CHKRAM | 146A DCOMPR | F87F FNKSTR
0B9F CHKSCR | F7F4 DECCNT | FBCD FNKSWI
08BC CHPUT | 268C DECSUB | F3E9 FORCLR
08DF CHPUT1 | F7F2 DECTM2 | 148E FORMAT
2686 CHRGTR | F7F0 DECTMP | F3F5 FRCNEW
0D6A CHSNS | F6CA DEFTBL | F69B FRETOP
FBCA FSTPOS | FEEE H.DSKC | FE67 H.MERG
F7BA FUNACT | FE12 H.DSKF | FE3A H.MKD
F3FA GETPNT | FE17 H.DSKI | FE30 H.MKI
1474 GETVC2 | FDEF H.DSKO | FE35 H.MKS
1470 GETVCP | FDA9 H.DSPC | FDF9 H.NAME
2689 GETYPR | FDB3 H.DSPF | FF3E H.NEWS
04BD GICINI | FEA3 H.EOF | FDD6 H.NMI
FCB7 GRPACX | FDAE H.ERAC | FEB7 H.NODE
FCB9 GRPACY | FDB8 H.ERAF | FE58 H.NOFO
F3CD GRPATR | FF02 H.ERRF | FF34 H.NOTR
F3CB GRPCGP | FFB1 H.ERRO | FE62 H.NTFL
F3C9 GRPCOL | FEFD H.ERRP | FF2F H.NTFN
FCA6 GRPHED | FF70 H.EVAL | FF6B H.NTPL
F3C7 GRPNAM | FE2B H.FIEL | FE5D H.NULO
F3CF GRPPAT | FE7B H.FILE | FF75 H.OKNO
1510 GRPPRT | FE85 H.FILO | FDEA H.ONGO
0704 GSPSIZ | FF1B H.FINE | FEE4 H.OUTD
18C7 GTASPC | FF7A H.FING | FEB2 H.PARD
12AC GTPAD | FF16 H.FINI | FFA7 H.PHYD
1273 GTPDL | FF5C H.FINP | FDDB H.PINL
11EE GTSTCK | FEA8 H.FOPS | FFC5 H.PLAY
1253 GTTRIG | FFAC H.FORM | FEBC H.POSD
FCB3 GXPOS | FF9D H.FRET | FEF8 H.PRGE
FCB5 GYPOS | FF66 H.FRME | FF52 H.PRTF
F40A HEADER | FF93 H.FRQI | FFA2 H.PTRG
FE1C H.ATTR | FEC6 H.GEND | FDE0 H.QINL
FEAD H.BAKU | FE4E H.GETP | FF07 H.READ
FE76 H.BINL | FF43 H.GONE | FF4D H.RETU
FE71 H.BINS | FE8A H.INDS | FE26 H.RSET
FF8E H.BUFL | FDC7 H.INIP | FE8F H.RSLF
FDC2 H.CHGE | FDE5 H.INLI | FECB H.RUNC
FDA4 H.CHPU | FE03 H.IPL | FE94 H.SAVD
FF48 H.CHRG | FEDF H.ISFL | FE6C H.SAVE
FED0 H.CLEA | FF7F H.ISMI | FF98 H.SCNE
FE0D H.CMD | FF2A H.ISRE | FFC0 H.SCRE
FF57 H.COMP | FDCC H.KEYC | FE53 H.SETF
FE08 H.COPY | FD9A H.KEYI | FDF4 H.SETS
FEE9 H.CRDO | FDFE H.KILL | FF39 H.SNGF
FF20 H.CRUN | FDD1 H.KYEA | FEDA H.STKE
FF25 H.CRUS | FF89 H.LIST | FD9F H.TIMI
FE49 H.CVD | FE99 H.LOC | FDBD H.TOTE
FE3F H.CVI | FE9E H.LOF | FF61 H.TRMN
FE44 H.CVS | FED5 H.LOPD | FF84 H.WIDT
FEF3 H.DDGR | FFB6 H.LPTO | F408 HIGH
FEC1 H.DEVN | FFBB H.LPTS | FC4A HIMEM
FE80 H.DGET | FE21 H.LSET | F83E HOLD
FF11 H.DIRD | FF0C H.MAIN | F836 HOLD2
F806 HOLD8 | 15DF MAPXYC | 18CF PNTINI
098F INESC | F92F MAXDEL | 088E POSIT
139D INIFNK | F85F MAXFIL | F7B4 PRMFLG
05D2 INIGRP | F3EC MAXUPD | F6E6 PRMLEN
061F INIMLT | F958 MCLFLG | F74E PRMLN2
2680 INIT | FB3B MCLLEN | F74C PRMPRV
0538 INIT32 | FB3C MCLPTR | F6E4 PRMSTK
049D INITIO | F956 MCLTAB | FD89 PROCNM
050E INITXT | F672 MEMSIZ | FB35 PRSCNT
23D5 INLIN | F92D MINDEL | F416 PRTFLG
FCA8 INSFLG | F3EF MINUPD | F864 PTRFIL
FCA2 INTCNT | F3D7 MLTATR | F6A9 PTRFLG
FC9B INTFLG | F3D5 MLTCGP | 0F55 PUTCHR
FCA0 INTVAL | F3D3 MLTCOL | F3F8 PUTPNT
03FB ISCNTC | F3D1 MLTNAM | 1492 PUTQ
145F ISFLIO | F3D9 MLTPAT | 23CC QINLIN
FC9E JIFFY | F951 MOVCNT | F971 QUEBAK
FCAD KANAMD | FB3F MUSICF | F959 QUETAB
FCAC KANAST | F922 NAMBAS | FB3E QUEUEN
F41F KBUF | FBE5 NEWKEY | F3F3 QUEUES
0D89 KEYANY | 4601 NEWSTT | F418 RAWPRT
FBF0 KEYBUF | F87C NLONLY | F380 RDPRIM
0E3B KEYCOD | 1398 NMI | 110E RDPSG
0C3C KEYINT | F7B7 NOFUNS | 01B6 RDSLT
0468 KILBUF | 1809 NSETCX | 7E1A RDSLTW
0F10 KYEASY | F417 NTMSXP | 1449 RDVDP
107D KYGRAP | F862 NULBUF | 07D7 RDVRM
0F36 KYLOCK | FBDA OLDKEY | 1647 READC
0F46 KYSTOP | F6BE OLDLIN | F3F7 REPCNT
070F LDIRMV | FCB0 OLDSCR | FC6A REQSTP
0744 LDIRVM | F6C0 OLDTXT | F3DF RG0SAV
16EE LEFTC | F6BB ONEFLG | F3E0 RG1SAV
F954 LFPROG | F6B9 ONELIN | F3E1 RG2SAV
14EB LFTQ | FBD8 ONGSBF | F3E2 RG3SAV
F3AF LINL32 | F664 OPRTYP | F3E3 RG4SAV
F3AE LINL40 | 1B45 OUTDO | F3E4 RG5SAV
F3B0 LINLEN | FC9D PADX | F3E5 RG6SAV
FBB2 LINTTB | FC9C PADY | F3E6 RG7SAV
F94B LOHADR | F6E8 PARM1 | 16C5 RIGHTC
F94D LOHCNT | F750 PARM2 | F857 RNDX
F94A LOHDIR | F926 PATBAS | FAF5 RS2IQ
F949 LOHMSK | FC40 PATWRK | 144C RSLREG
F406 LOW | 08DB PBDHRT | F955 RTPROG
FCA4 LOWLIM | F953 PDIREC | FC9A RTYCNT
085D LPTOUT | 148A PHYDIO | FCBE RUNBNF
F415 LPTPOS | 23BF PINLIN | F866 RUNFLG
0884 LPTSTT | FB40 PLYCNT | F87D SAVEND
FCBF SAVENT | 1A63 TAPION
FB36 SAVSP | 19DD TAPOFF
F6B1 SAVSTK | 19F1 TAPOON
F6AF SAVTXT | 1A19 TAPOUT
FB39 SAVVOL | 170A TDOWNC
1599 SCALXY | F6A7 TEMP
197A SCANL | F6BC TEMP2
18E4 SCANR | F69D TEMP3
2439 SCITBL | F69F TEMP8
F3F6 SCNCNT | F7B8 TEMP9
FCAF SCRMOD | F678 TEMPPT
02A3 SELEXP | F67A TEMPST
027E SELPRM | 083B TOTEXT
1676 SETATR | F7C4 TRCFLG
167E SETC | F3E8 TRGFLG
0602 SETGRP | FC4C TRPTBL
0659 SETMLT | F661 TTYPOS
07EC SETRD | 173C TUPC
05B4 SETT32 | F3B9 TXTATR
0C2B SETTRM | F3B7 TXTCGP
0594 SETTXT | F3B5 TXTCOL
07DF SETWRT | F3B3 TXTNAM
FBEB SFTKEY | F3BB TXTPAT
F94F SKPCNT | F676 TXTTAB
120C SLSTCK | 175D UPC
FCC9 SLTATR | F39A USRTAB
FCC5 SLTTBL | F663 VALTYP
FD09 SLTWRK | F6C2 VARTAB
1452 SNSMAT | FB41 VCBA
F3E7 STATFL | FB66 VCBB
F674 STKTOP | FB8B VCBC
1384 STMOTR | F419 VLZADR
0A69 STOCSR | F41B VLZDAT
1640 STOREC | F975 VOICAQ
F6C6 STREND | F9F5 VOICBQ
6678 STROUT | FA75 VOICCQ
11C4 STRTMS | FB38 VOICEN
F6A5 SUBFLG | FCA5 WINWID
F7BC SWPTMP | F385 WRPRIM
2683 SYNCHR | 01D1 WRSLT
F3C3 T32ATR | 1102 WRTPSG
F3C1 T32CGP | 057F WRTVDP
F3BF T32COL | 07CD WRTVRM
F3BD T32NAM | 144F WSLREG
F3C5 T32PAT |
1ABC TAPIN |
19E9 TAPIOF |
Anuncios
Publicado en Sin categoría | Deja un comentario

RAM del Sistema y Tabla de VECTORES

La RAM del SISTEMA

Si usted es un poco curioso, habrá observado que en ocasiones encontramos efectos inesperados “pokeando” en determinadas direcciones valores determinados. Esto se debe a que los programadores que crearon el Sistema Operativo del MSX, pensaron en la posibilidad de modificar el Sistema Operativo según las necesidades del Usuario. Para ello reservaron una zona de memoria modificable (RAM) desde la cual manejar el flujo de las principales Rutinas (ROM) del Sistema que, por supuesto, no son directamente modificables. A esta zona se le suele llamar región de comunicación y podemos dividirla en dos grandes zonas:

  • La Ram del Sistema
  • La Tabla de Vectores

La RAM del SISTEMA

Es una zona en la que se guardan los principales Parámetros y Variables Internas. Contiene principalmente elementos de un octeto (variables internas y semáforos) y elementos de dos octetos (variables internas y direcciones). Comienza en &hF380 y termina en &hFD99.

A contuniación pasamos a exponer los principales Parámetros indicando para su comodidad el Nombre, la Dirección, la Longitud y la Función de las principales variables.

NOMBRE DIR. LONG. FUNCIÓN
ARG F847 016 Acumulador Secundario
ARYTAB F6C4 002 Dirección de la Tabla de variables de matriz
ASPECT F931 002 Zona de trabajo CIRCLE
ATRBYT F3F2 001 Octeto Atributo
AUTFLG F6AA 001 Indicador de AUTO si = 0
AUTINC F6AD 002 Incremento entre líneas para AUTO
AUTLIN F6AB 002 Número actual de línea utilizado por AUTO
BAKCOL F3EA 001 Color de Fondo
BASETB F91F 010 Valores Tablas del VDP
BASLOD FCAE 001 Indicador carga BASIC
BASROM FBB1 001 Si BASIC está en ROM = 0
NOMBRE DIR. LONG. FUNCIÓN
BDRCOL F3EB 001 Color de borde
BOTTOM FC48 002 Dir. comienzo de la RAM
BRDATR FCB2 001 Color de borde en PAINT
BUF F55E 258 Zona Buffer del Teclado
CAPST FCAB 001 Indicador de Caps Lock
CASATR F3FC 020 Gestión del Cassette
CLIKSW F3DB 001 Indicador click. Si = 0
CLMLST F3B2 001 Núm. caracteres para TAB
CLPRIM F38C 014 Rutina de salto al interior del Slot en Banco 0
CNSDFG F3DE 001 Flag Teclas de Función 0 = no visibles
CODSAV FBCC 001 Código del Cursor
CONSAV F668 001 Archivo temporal del Código de Instruc­ción
CONTXT F666 002 Dir. carácter actual txt
CRTCNT F3B1 001 Núm. líneas por Pantalla
CSRSW FCA9 001 Cursor On / Cursor Off
CSRX F3DD 001 Posición horizontal actual del cursor
CSRY F3DC 001 Posición vertical actual del cursor
CSTYLE FCAA 001 Carácter del cursor
CURLIN FA1C 002 Núm. actual de la línea en curso de eje­cución
DAC F776 016 Acumulador Matemático
DATLIN F6A3 002 Indicador de la última línea DATA leída
DATPTR F6C8 002 Puntero octeto siguiente a último carácter en modo de ejecución
DEFTBL F6CA 026 Tabla de declaración de Variables
DIMFLG F662 001 Indicador para DIM
DORES F664 001 Tipo de Operador
DOT F6B5 002 Núm. actual de linea
DRWANG FCBD 001 Angulo para DRAW
DRWFLG FCBB 001 Indicador para DRAW
DRWSCL FCBC 001 Escala para DRAW
DSCTMF F698 002 Dirección siguiente octeto disponible en la Tabla de cadenas
ENDBUF F660 001 Fin de Buffer
ENDFOR F6A1 002 Puntero Instrucción FOR
ENDPRG F40F 005 Puntero para RESUMENEXT
ENSTOP FBB0 001 Posible recalentamiento si es igual a cero
ERRFLG F414 001 Núm. del último error
ERRLIN F6B3 002 Núm. línea con error
ERRTXT F6B7 002 Puntero para RESUME
ESCCNT FCA7 001 Contador Sentencia SCAPE
NOMBRE DIR. LONG. FUNCIÓN
EXPTBL FCC1 004 Comienzo zona de trabajo en conmuta­ción Cartucho
FBUFFR F7C5 43 Zona de trabajo BCD
FLBMEM FCAE 001 Indicador de carga para Programa BASIC
FLGINP F6A6 001 Flag para INPUTREAD
FNKFLG FBCE 010 Flag para ON KEY GOSUB
FNKSTR F87F 160 Contenido Teclas Función
FORCLR F3E9 001 Color texto (utilizado por sentencia COLOR)
FRCNEW F3F5 001 Contiene &hFF
FRETOP F69B 002 Dirección máxima del espacio de cadenas
FSTPOS FBCA 002 Primera posición de carácter en INLIN
FUNACT F7BA 002 Uso temporal para recogida de basura.
GETPUT F3FA 002 Dir. octeto actual a leer en buffer de Te­clado
GRPACX FCB7 002 Acumulador gráfico X
GRPACY FCB9 002 Acumulador gráfico Y
GRPATR F3CD 002 Dir. Tabla de atributos de Sprites
GRPCGP F3CB 002 Dir. Tabla del generador de patrones en Screen 2
GRPCOL F3C9 002 Dir. Tabla de colores en Screen 2
GRPHED FCA6 001 Encabezamiento de carácter gráfico
GRPNAM F3C7 002 Tabla del nombre de patrones en Screen 2
GRPPAT F3CF 002 Tabla del generador de Sprites en Screen 2
GXPOS FCB3 002 Posición horizontal del cursor en gráficos
GYPOS FCB5 002 Posición vertical del cursor en gráficos
HIMEM FC4A 002 Dir. final memoria RAM
INSFLG FCA8 001 Indicador modo inserción
INTCNT FCA2 002 Contador de Intervalo
INTFLG FC9B 001 Indicador de Interrupción
INTVAL FCA0 002 Valor de intervalo en ON INTERVAL GOSUB
JIFFY FC9E 002 Jiffy
KBUF F41F 318 Buffer para la codificación de una línea BASIC
KEYBUF FBF0 040 Buffer codificación de Tecla
LINL32 F3AF 001 Long. línea en Screen 1
LINL40 F3AE 001 Long. línea en Screen 0
LINLEN F3B0 001 Long. línea actual
LINTTB FBB2 024 Tabla de terminadores de línea
LINWRK FC18 040 Operaciones de proceso de Pantalla
LOHMSK F949 001 Zona trabajo para PAINT
NOMBRE DIR. LONG. FUNCIÓN
LOWLIM FCA4 001 Lectura de Cassette
LPTPOS F415 001 Posición cabeza Impresora
MAXFIL F85F Comienzo zona de parámetros para la ma­nipulación de Ficheros
MCLTAB F956 002 Zona de trabajo para PLAY
MEMSIZ F672 002 Valor superior de la memoria utilizable por el BASIC (modificable con CLEAR)
MLTATR F3D7 002 Dir. Tabla de atributos de Sprites en Screen 3
MLTCGP F3D5 002 Dir. Tabla del generador de patrones en Screen 3
MLTCOL FSD3 002 Dir. Tabla de colores en Screen 3
MLTNAM F3D1 002 Dir. Tabla del nombre de patrones en Screen 3
MLTPAT F3D9 002 Dir Tabla del generador de Sprites en Screen 3
NTMSXP F417 001 Tipo de impresora.  MSX = 0
OLDKEY FBDA 011 Antiguo estado de Tecla
OLDLIN F6BE 002 Núm. de línea establecido por STOP y END
OLDSCR FCB0 001 Antiguo modo de Pantalla
OLDTXT F6C0 002 Dir. del último octeto ejecutado
ONEFLG F6BB 001 Vale &hFF durante tratamiento ON ERROR
ONELIN F6B9 002 Núm. línea de tratamiento de error
ONGSBF FBD8 001 Flag de condición para ONGOSUB
PADX FC9D 001 Valor de X para el Pad
PADY FC9C 001 Valor de Y para el Pad
PARM1 FSE8 100 Tabla de parámetros para funciones def. por Usuario
PARM2 F750 100 Direcciones de parámetros
PRTFLG F416 001 Flag de Impresora: 1=Impresora, 0=Pantalla
PTRFLG F6A9 001 Indicador de modo Programa o modo Directo
PUTPNT F3F8 002 Buffer teclado (put)
QUEUES F3F3 002 Dir. Tabla de espera
RDPRIM F380 011 Lectura Slots Banco 0
RG0SAV F3DF 008 Contenido de los ocho registros del VDP (0-7)
RTYCNT FC9A 001 Control de interrupción
RUNBNF FCBE 001 Flag Entrada/Salida bin
NOMBRE DIR. LONG. FUNCIÓN
SAVENT FCBF 002 Comienzo de BSAVE
SAVSTK F6B1 002 Guarda la dirección del SP para manipular error
SAVTXT F6AF 002 Puntero para RESUME
SCNCNT F3F6 001 Sincronización de exploración de Tecla
SCRMOD FCAF 001 Modo actual de Pantalla
STKTOP F674 002 Dirección superior del Puntero de Pila (SP)
STREND FSC6 002 Dir. comienzo de espacio disponible de memoria
SUBFLG F6A5 001 Indicador para FOR y USR
SWPTMP F7BC 008 Almacenamiento temporal para SWAP
T32ATR F3C3 002 Dir. Tabla de atributos de Sprites en Screen 1
T32CGP F3C1 002 Dir. Tabla del generador de patrones en Screen 1
T32COL F3BF 002 Tabla de colores Screen 1
T32NAM F3BD 002 Dir. Tabla del nombre de patrones en Screen 1
T32PAT F3C5 002 Dir. Tabla del generador de Sprites en Screen 1
TRCFLG F7C4 001 TROFF=0, TRON=1
TXTATR F3B9 002 Dir. Tabla de atributos de Sprites Screen 0
TXTCGP F3B7 002 Dir. Tabla del generador de patrones Screen 0
TXTCOL F3B5 002 Dir. Tabla de colores en Screen 0
TXTNAM F3B3 002 Dir. Tabla del nombre de patrones en Screen 0
TXTPAT F3BB 002 Dir. Tabla del generador de Sprites Screen 0
TXTTAB F676 002 Dir. comienzo de texto en Programa  BASIC
USRTAB F39A 020 Tabla de las direcciones definidas por la Instrucción DEFUSR n=
VALTYP F663 001 Tipo de variable presente en DAC
VARTAB F6C2 002 Dirección de la Tabla de variables simples
VLZADR F419 002 Utilizada por VAL
VOICAQ F975 128 Comienzo de las tres direcciones de las listas de espera musicales
WRPRIM F385 007 Rutina de escritura de los Slots del Banco 0

La TABLA de VECTORES

La otra parte del área de parcheo, o región de comunicación, es la llamada TABLA de VECTORES (Hook). Comienza en la &hFD9A y termina en &hFFC9.

En esta zona podemos, como luego veremos, interceptar las grandes rutinas de la ROM del Sistema. Esto es posible porque cada llamada a una rutina BASIC pa­sa por uno de los vectores situados en esta zona por medio de una instrucción CALL.

Cada vector está compuesto de cinco octetos cargados inicialmente con el código de retorno RET (&h09) y por lo tanto, a no ser que esté interferido por las direcciones utilizadas por el Disc Basic, volverá directamente a la ROM sin hacer nada.

Para interceptar una rutina deberemos escribir en el grupo correspondiente una instrucción de salto incondicional JP (&hC3) y la dirección a la cual transferir la rutina teniendo en cuenta la parte alta y baja de la dirección convenida.

A continuación pasamos a detallar una lista con las direcciones, el nombre y la función de dichos vectores.

NOMBRE DIR. FUNCIÓN
ATTR FE1C Al inicio de la rutina de atributos
BAKU FEAD En la rutina de vuelta atrás
BINL FE76 Al final de la instrucción SAVE
BINS FE71 En la rutina de instrucción SAVE
BUFLIN FF8E En la rutina de la instrucción LIST al convertir el código en clave (Buffer Línea)
CHGET FDC2 Al inicio de lectura de un carácter
CHPUT FD44 Al inicio de escritura en pantalla del carácter conte­nido en A en modo de Texto
CHRGET FF48 Al inicio de la recogida de un carácter
CLEARC FED0 En la rutina de inicialización de la Tabla de variables
CMD FE0D Al inicio de la instrucción CMD
COMPRT FF57 En el tratamiento de la instrucción PRINT
COPY FE08 Al inicio de instrucción COPY
CRDO FEE9 En la rutina da impresión de un carácter seguido de retorno de carro
CRUNCH FF20 En la rutina de conversión de una línea Basic en código
CRUSH FF25 Al inicio de búsqueda de una instrucción en la Tabla
CVD FE49 Al inicio de instrucción CVD (conversión a doble precisión)
CVI FE3F Al inicio de instrucción CVI (conversión a entero)
CVS FE44 Al inicio de instrucción CVS (conversión simple precisión)
NOMBRE DIR. FUNCIÓN
DEVN FEC1 En la rutina nombre de Unidad
DGET FE80 En la rutina lectura del Disco. En la rutina de ejecu­ción en modo directo..
DOGRPH FEF3 Al inicio funciones gráficas
DSKC FEEE En la rutina de lectura de un carácter de Disco
DSKF FE12 Al inicio de Instrucción DSKF (espacio libre en Disco)
DSKI FE17 Al inicio instrucción de escritura en Disco
DSKO FDEF Al inicio instrucción de lectura de Disco
DSPC FDA9 Al inicio rutina de actualización del cursor
DSPFNK FDB3 Al inicio de la rutina de visualización contenido de las Teclas de Función
EOF FEA3 Al inicio de la función EOF
ERAC FDAE Al inicio rutina de borrado del Cursor
ERAFNK FDB8 Al inicio de la rutina borrado del contenido Teclas Función
ERRF FF02 Al final impresión del mensaje de error
ERRO FFB1 Al inicio de tratamiento error
ERRP FEFD Al inicio impresión del mensaje de error
EVAL FF70 Al inicio de evaluación de una expresión
FIEL FE2B Al inicio instrucción FIELD
FILES FE7B Al inicio Instrucción FILES
FILOUT FE85 Al inicio de salida a Fichero
FINEND FF1B Al final de la interpretación
FING FF7A Al final evaluación funciones
FINI FF16 Al final de la interpretación de una instrucción
FINP FF5C Al final tratamiento de la Instrucción PRINT
FORM FFAC Utilizado por el Call Bios en &h0148 en rutina formateadora del Disco
FPOS FEA8 Al inicio función FPOS
FREEUP FF9D Antes de la búsqueda de un espacio libre para una cadena de caracteres
FRMEVL FF66 Al inicio de evaluación de una fórmula
FRQL FF93 Al inicio instrucción POKE
GENDSP FEC6 En la rutina general de reparto de Unidades
GETPTR FE4E Al inicio de lectura del puntero de Fichero
GONE FF43 Al inicio instrucciones de flujo de Programa
INDS FE8A Al inicio comprobación rutinas
INIP FDC7 A la inicialización del VDP
INLIN FDE5 Al inicio de INPUT (lectura de línea)
NOMBRE DIR. FUNCIÓN
IPL FEA3 Al inicio de la instrucción IPL (carga inicial del Programa)
ISFL FEDF Al inicio de comprobación existencia de Fichero E/S
ISMI FF7F Al inicio instrucción MID$
ISREW FF2A Al inicio descubrimiento de palabra reservada en fase CRUNCH
KEYCOD FDCC Al inicio lectura de Teclado
KEYI FD9A Llamada en &h004B. Tratamiento de interrupciones VDP
KILL FDFE Al inicio instrucción KILL
KEYEAS FDD1 Llamada en &h0F10 Antes de convertir carácter enviado por Teclado según Tabla situada en &h1003
LIST FF89 En la rutina de (L)LIST
LOC FE99 Al Inicio de la función LOC
LOF FE9E En la función LOF (long. Fichero)
LPTO FFB6 En la rutina de escritura por Impresora
LPTS FFBB En la rutina de Test de estado de la Impresora (CHKPTR)
LSET FE21 En la instrucción LSET
MAIN FF0C Llamada entrada del Intérprete
MERGE FE67 En la instrucción MERGE
MKD$ FE3A En la función MKG$. Creación de doble precisión.
MKI$ FE30 En la función MKI$. Creación de entero.
MKS$ FE35 Al inicio de instrucción MKS$. Creación de simple precisión.
NAME FDF9 En el comienzo de cambio nombre
NMI FDD6 Tratamiento de interrupción no enmascarable
NODEV FEB7 Si falta nombre de Unidad
NOFOR FE58 Falta FOR en la instrucción OPEN
NTFL FE62 En la instrucción CLOSE
NTFN FF2F Cuando la palabra reservada va seguida de número de línea
NULOPE FE5D En la rutina de apertura de Fichero nulo
ONGO FDEA En la instrucción ON GOTO y ON GOSUB
OUTDO FEE4 En la salida da carácter por Pantalla o Impresora
PARDEV FEB2 Al comienzo de análisis de nombre de Unidad
PINLIN FDDB En la rutina línea de Programa
PLAY FFC5 En la instrucción PLAY
PRGET FEF8 Al final ejecución de Programa
QINLIN FDE0 En la rutina de impresión de ? en la instrucción INPUT
NOMBRE DIR. FUNCIÓN
READY FF07 En impresión OK
RETURN FF4D En la instrucción RETURN
RSET FE26 En instrucción RSET
RSLF FE8F En instrucción INPUT$
RUNC FECB En la instrucción NEW o RUN
SAVD FE94 Para grabar en la Unidad actual
SAVED FE6C Al comienzo de SAVE
SCNEX FF98 En la conversión de número de línea en puntero y a la inversa
SCREEN FFC0 Al principio instrucción SCREEN
SETFIL FE53 En la rutina de inicialización de puntero sobre un Fichero
SET FDF4 En la instrucción SET
STKERR FEDA En rutina de error de la Pila
TIMI FD9F Llamada en &h0C53. En la rutina de lectura del registro de estado del VDP. Tratamiento de interrupción.
TOTE FDBD En rutina de retorno a modo de Texto desde un modo Gráfico.
TRMNOK FF61 En el tratamiento de un DATA o INPUT incorrectos
WIDTH FF84 En la instrucción WIDTH

Nota: Info extraída del Libro: “MSX – Más allá del BASIC” (Editorial RAMA) – Páginas 43-51

Publicado en Sin categoría | Deja un comentario

Listado de MNEMÓNICOS del Z80 – Ordenados por DIRECCIÓN

 

 

 

 

 

Como curiosidad comentar que estas Tablas las he sacado del Especial CM de la Revista MSX-EXTRA y siguen el mismo Formato.

En la versión que está ordenada por el NOMBRE-INSTRUCCIÓN me he permitido la “licencia” de poner primero la columna donde aparece el Código Fuente y luego en la que aparece el Código Objeto (creo que tiene mucho más sentido y así resulta mucho más legible y práctica a nivel visual).

Las he insertado en la Entrada como veis en Formato “.JPG” porque es imposible pegar el contenido desde el Word en el Blog y que se respete el Formato original de las Tablas que creé (Fuentes, Tamaños, Columnas, Colores….). Copiar y pegar texto manteniendo el Formato es tarea IMPOSIBLE en los Blog de WORDPRESS.COM (ya que no se puede tampoco insertar ningún Plugin que facilite esta Tarea) y lo de los saltos de línea es una LOCURA… (A menudo lo que ves mientras creas la Entrada y luego la publicas difiere bastante…)

Estas Tablas las creé haciendo OCR a los originales de la MSX-EXTRA pero tuve que corregir algún error que aparecía en el original. Para depurar las Tablas y corregir errores recurrí a comparar Listados de diferentes Libros. Increíblemente todos todos todos los Libros que consulté tenían algún error: se cambiaba algún caracter (a veces se cambiaban “0” por “O” o viceversa, otras “I” por “1” o viceversa, otras “8” por “B” o viceversa y algunos errores más). Como curiosidad os comento que de hecho los de la Revista MSX-Extra sacaron estas Tablas del Libro “MSX – Más allá del Basic (Editorial RAMA)” y copiaron hasta los errores del original…(¡vamos, que no se molestaron en revisarlas-compararlas con otras “fuentes”…!)

Nota: como véis la tipografía de este Blog tampoco es muy allá… Los “ceros” parecen letras “o” minúsculas… 😦

Entiendo que en la mayoría de los casos cada Libro-Revista hizo lo mismo que yo: hizo OCR de otro Listado para adaptarlo-maquetarlo a las necesidades y longitud-extensión del Libro o Revista en cuestión. Si tenemos en cuenta que en muchos casos las Fuentes y Tipografías utilizadas no eran las más idóneas para distinguir esos caracteres y que la calidad de impresión no siempre era lo buena que debiera como resultado aparece ese “baile de caracteres” (os aseguro que según la Fuente que se utilice los caracteres mencionados se distinguen mucho mejor o peor, según el caso).

En fin…, que la depuración de estas Tablas ha sido una Tarea de “Chinos” y la he tenido que imprimir y rehacer varias veces para ir eliminando los errores encontrados. 😉

Para los que quieran trabajar en Ensamblador y usar un Desensamblador en un MSX real os dejo este LOTE ENSAMBLADORIL” que podéis descargar AQUÍ y que incluye lo siguiente:

  • Imagen “.DSK” del Ensamblador/Desensamblador RSC con todas sus versiones(RSC 1, RSC 1 versión 2 y RSC II).

Nota: una vez cargado el “.DSK” para ejecutarlo os recomiendo hacer LOAD”RSC.BAS,R  (de esta forma veréis que se ejecuta un Menú que os va a pedir qué versión del RSC queréis usar y también si queréis usar el modo de visualización de 40 ú 80 columnas) (el modo de 80 columnas sólo es válido para Ordenadores MSX-2)

  • Manual del RSC-II.  El RSC-II es un Ensamblador-Desensamblador bastante decente y que en su día fue publicado por la Revista MSX-CLUB. Incluyo el Manual en PDF (con Formato de 2 Páginas por Hoja) y un Documento aparte con una Portada  (fichero de Word) que yo creé.  Incluyo también el Manual original en Formato Word a partir del cual creé el PDF. Lo ideal es imprimirlo con el Formato de “2 páginas por hoja” y si queréis añadirle la Portada y así queda bastante cómodo y manejable.Yo lo tengo impreso en Formato “Revista” (con 2 Páginas por Hoja), con dos grapas en medio e incluyendo la Portada y queda muy chulo. 😉
  • Tabla de Mnemónicos del Ensamblador Z80. Os dejo los siguientes Ficheros-Formatos: 

– Versión en PDF original del Especial CM de la Revista MSX-EXTRA ordenada por NOMBRE.

– Versión en PDF original del Especial CM de la Revista MSX-EXTRA ordenada por NÚMERO.

– Versión en PDF de la versión realizada por mí partiendo del original del Especial CM de la Revista MSX-EXTRA ordenada por NOMBRE (se distingue porque al final del nombre del fichero pone “by Manolito74”) (también he incluido los respectivos Ficheros “.JPG” que aparecen en el Blog).

– Versión en PDF de la versión realizada por mí partiendo del original del Especial CM de la Revista MSX-EXTRA ordenada por NÚMERO (se distingue porque al final del nombre del fichero pone “by Manolito74”) (también he incluido los respectivos Ficheros “.JPG” que aparecen en el Blog).

– Versión en Fichero de WORD de la Tabla ordenada por NOMBRE (son 3 Ficheros “.doc”)

– Versión en Fichero de WORD de la Tabla ordenada por NÚMERO (son 3 Ficheros “.doc”)

Nota: he decidido incluir los originales en Word por si alguien quiere formatearlos a su gusto, cambiar las fuentes, el tamaño, la distribución, los colores o corregir alguna hipotética errata (que espero que no haya ninguna porque os aseguro que están revisados a conciencia…). No obstante por favor si alguien ve una errata que me lo notifique a mi dirección de GMAIL –> josemanuel74

Por supuesto me podéis contactar para cualquier comentario-crítica-sugerencia, etc, etc, etc.

Gracias & Saludetes. 😉

Publicado en Sin categoría | Deja un comentario

Listado de MNEMÓNICOS del Z80 – Ordenados por NOMBRE

 

 

 

 

Como curiosidad comentar que estas Tablas las he sacado del Especial CM de la Revista MSX-EXTRA y siguen el mismo Formato.

En la versión que está ordenada por el NOMBRE-INSTRUCCIÓN me he permitido la “licencia” de poner primero la columna donde aparece el Código Fuente y luego en la que aparece el Código Objeto (creo que tiene mucho más sentido y así resulta mucho más legible y práctica a nivel visual).

Las he insertado en la Entrada como veis en Formato “.JPG” porque es imposible pegar el contenido desde el Word en el Blog y que se respete el Formato original de las Tablas que creé (Fuentes, Tamaños, Columnas, Colores….). Copiar y pegar texto manteniendo el Formato es tarea IMPOSIBLE en los Blog de WORDPRESS.COM (ya que no se puede tampoco insertar ningún Plugin que facilite esta Tarea) y lo de los saltos de línea es una LOCURA… (A menudo lo que ves mientras creas la Entrada y luego la publicas difiere bastante…)

Estas Tablas las creé haciendo OCR a los originales de la MSX-EXTRA pero tuve que corregir algún error que aparecía en el original. Para depurar las Tablas y corregir errores recurrí a comparar Listados de diferentes Libros. Increíblemente todos todos todos los Libros que consulté tenían algún error: se cambiaba algún caracter (a veces se cambiaban “0” por “O” o viceversa, otras “I” por “1” o viceversa, otras “8” por “B” o viceversa y algunos errores más).  Como curiosidad os comento que de hecho los de la Revista MSX-Extra sacaron estas Tablas del Libro “MSX – Más allá del Basic (Editorial RAMA)” y copiaron hasta los errores del original…(¡vamos, que no se molestaron en revisarlas-compararlas con otras “fuentes”…!)

Nota: como véis la tipografía de este Blog tampoco es muy allá… Los “ceros” parecen letras “o” minúsculas… 😦

Entiendo que en la mayoría de los casos cada Libro-Revista hizo lo mismo que yo: hizo OCR de otro Listado para adaptarlo-maquetarlo a las necesidades y longitud-extensión del Libro o Revista en cuestión. Si tenemos en cuenta que en muchos casos las Fuentes y Tipografías utilizadas no eran las más idóneas para distinguir esos caracteres y que la calidad de impresión no siempre era lo buena que debiera como resultado aparece ese “baile de caracteres” (os aseguro que según la Fuente que se utilice los caracteres mencionados se distinguen mucho mejor o peor, según el caso).

En fin…, que la depuración de estas Tablas ha sido una Tarea de “Chinos” y la he tenido que imprimir y rehacer varias veces para ir eliminando los errores encontrados. 😉

 

Para los que quieran trabajar en Ensamblador y usar un Desensamblador en un MSX real os dejo este LOTE “ENSAMBLADORIL que podéis descargar AQUÍ y que incluye lo siguiente:

 

  • Imagen “.DSK” del Ensamblador/Desensamblador RSC con todas sus versiones(RSC 1, RSC 1 versión 2 y RSC II).

Nota: una vez cargado el “.DSK” para ejecutarlo os recomiendo hacer LOAD”RSC.BAS”, R (de esta forma veréis que se ejecuta un Menú que os va a pedir qué versión del RSC queréis usar y también si queréis usar el modo de visualización de 40 ú 80 columnas) (el modo de 80 columnas sólo es válido para Ordenadores MSX-2)

  • Manual del RSC-II.  El RSC-II es un Ensamblador-Desensamblador bastante decente y que en su día fue publicado por la Revista MSX-CLUB. Incluyo el Manual en PDF (con Formato de 2 Páginas por Hoja) y un Documento aparte con una Portada  (fichero de Word) que yo creé.  Incluyo también el Manual original en Formato Word a partir del cual creé el PDF. Lo ideal es imprimirlo con el Formato de “2 páginas por hoja” y si queréis añadirle la Portada y así queda bastante cómodo y manejable.Yo lo tengo impreso en Formato “Revista” (con 2 Páginas por Hoja), con dos grapas en medio e incluyendo la Portada y queda muy chulo. 😉

 

  • Tabla de Mnemónicos del Ensamblador Z80. Os dejo los siguientes Ficheros-Formatos: 

– Versión en PDF original del Especial CM de la Revista MSX-EXTRA ordenada por NOMBRE.

– Versión en PDF original del Especial CM de la Revista MSX-EXTRA ordenada por NÚMERO.

– Versión en PDF de la versión realizada por mí partiendo del original del Especial CM de la Revista MSX-EXTRA ordenada por NOMBRE (se distingue porque al final del nombre del fichero pone “by Manolito74”) (también he incluido los respectivos Ficheros “.JPG” que aparecen en el Blog).

– Versión en PDF de la versión realizada por mí partiendo del original del Especial CM de la Revista MSX-EXTRA ordenada por NÚMERO (se distingue porque al final del nombre del fichero pone “by Manolito74”) (también he incluido los respectivos Ficheros “.JPG” que aparecen en el Blog).

– Versión en Fichero de WORD de la Tabla ordenada por NOMBRE (son 3 Ficheros “.doc”)

– Versión en Fichero de WORD de la Tabla ordenada por NÚMERO (son 3 Ficheros “.doc”)

Nota: he decidido incluir los originales en Word por si alguien quiere formatearlos a su gusto, cambiar las fuentes, el tamaño, la distribución, los colores o corregir alguna hipotética errata (que espero que no haya ninguna porque os aseguro que están revisados a conciencia…). No obstante por favor si alguien ve una errata que me lo notifique a mi dirección de GMAIL –> josemanuel74

 

Por supuesto me podéis contactar para cualquier comentario-crítica-sugerencia, etc, etc, etc.

Gracias & Saludetes. 😉

Publicado en Sin categoría | Deja un comentario

Entrevista a Ramón Sala, autor del Ensamblador/Desensamblador RSC / RSC II

Hola a todos:

Pues bien pese a que este material ya lo tengo desde hace tiempo por unas cosas y por otras lo he ido procrastinando, procrastinando y procrastinando y no ha sido hasta hoy que me he decidido a publicarlo. 😉

Si como yo lleváis ya tiempo en la escena MSX-era, eráis lectores de la MSX-Club y además os gustaba el tema de la Programación seguro que habéis oído hablar del Ensamblador/Desensamblador RSC / RSC II. Para quien no lo conozca decir que era un Ensamblador / Desensamblador de la época, en mi opinión MUY BUENO (yo era el que usaba y sigo usando) y encima “Made in Spain”. Desde luego para la época fue todo un lujo contar con Software como ese. Además recuerdo que incluso luego se llegó a incluir en la MSX-CLUB una Sección/Curso sobre el Ensamblador al hilo de la publicación del RSC.

Viendo Entrevistas publicadas en otras Web, como por ejemplo alguna de Konamito, a Carlos Mesa y otras que han aparecido de Jesús Manuel Montané y demás, siempre me ha “picado el gusanillo” de saber qué fue de otras de las personas que aparecían en la MSX-CLUB. Por ejemplo siento curiosidad de saber qué ha sido de Willy Miragall, Ronald Van Ginkel y que alguien les haga una Entrevista en “profundidad” y que nos cuente cosas de la época, entresijos de la MSX-Club, etc, etc, etc.

Pues bien, en esta ocasión, cosas de la vida y del “azahar” (que diría Millán, el de Martes y 13) di por causalidad con el autor del RSC y casi casi como que le “asalté” para hacerle un amago de “Entrevista”. Lamentablemente no le pillé en un buen momento porque no disponía de mucho tiempo pero tuvo la AMABILIDAD de responder e intentar saciar mi curiosidad.

Así que sin más dilación, vamos allá con el amago de “Entrevista”:

 




 ¡Hola Ramón!:

En primer lugar mil gracias por contestar.

No sé si sigues o no de alguna forma el mundo de la Emulación y en concreto el del MSX. El caso es que ayer charlando sobre temas de Ensamblador y demás en un Grupo de Desarrollo de MSX en Facebook salió el tema del RSC II.

Alguien me preguntaba que porqué no usaba otros Ensambladores/Desensambladores y yo respondí que bueno, que el RSC me gustaba, que me parecía un Ensamblador / Desensamblador bastante cómodo y potente y encima estaba hecho en España y en español. Luego además estuve releyendo varias Entrevistas que se han publicado sobre algunos miembros de la extinta MSX-CLUB:

http://www.msxblog.es/carlos-mesa-redactor-y-director-de-msx-club/

http://www.msxblog.es/entrevista-a-jesus-manuel-montane-msx-club/

Siempre sentí curiosidad por conocer algo sobre el autor del RSC ya que apenas se sabe nada y googleando un poco parece ser que he tenido la suerte de dar con él. En principio iba tan sólo a hacerte algunas preguntas a nivel particular pero ya que estamos y tras leer las Entrevistas hechas a Carlos Mesa y Jesús Manuel Montané pues creí que sería mejor hacerlo en modo de “Entrevista” y si te parece bien pues compartirlo. Así que vamos allá:

Nota: perdona que te “asalte” así pero es que me ha podido la emoción, así que espero que perdones este ímpetu mío y te agradecería respondieras a mis preguntas y cuentes todo lo que quieras, ¡qué bienvenido será…! Probablemente luego colgaré la Entrevista, si te parece bien, en mi Blog:   https://yotambientuveunmsx.wordpress.com/
(si logro ésto sería más feliz que una perdiz…) XD

Nota 2: te he reeenviado el Correo porque no sé si el otro se te traspapeló, o quizás tan sólo sea que no hayas tenido tiempo a contestarme o quizás que te hayas asustado y salido corriendo al leerlo…. (que espero que no sea el caso) XD

 

1. ¿Podrías contarnos algo sobre el pimer MSX que tuviste? (qué modelo/s tuviste, cuándo te lo regalaron, para qué lo usabas,  ….)

En estos momentos no le puedo dedicar tiempo al ordenador, así que voy a intentar comentarte brevemente todo lo que recuerdo (vagamente) de MSX.  Llegué a la informática tarde, a los 25 años, comparado con otras personas de mi generación, pero enseguida me sentí atraído por la programación de ordenadores.

Me compré yo mismo un MSX y, aunque no recuerdo el modelo, me parece que era el que tenía más prestaciones.

2. Yo al menos tan solo te “conocía” por ser el autor del RSC pero ayer me enteré que habías publicado algún Listado Basic en la MSX-CLUB. ¿Podrías comentarnos cuáles han sido tus colaboraciones en la MSX-CLUB, qué Listados y/o Artículos publicaste, etc?.

No estaba muy interesado en los juegos, aunque admito jugué con más de uno,  pero me interesó más la programación.

3. ¿Qué te llevó a hacer el Ensamblador/Desensamblador RSC?, ¿fue idea tuya?, ¿surgió de la necesidad que tuviste para poder programar más cómodamente sobre el MSX teniendo una Herramienta más potente?

Para hacer programas era necesario un ensamblador, así que me puse a programar el RSC.

4. ¿Qué versiones sacaste del RSC? Hasta donde yo sé creo que habría 3 versiones: el RSC, el RSC 2.0 y el RSC II. ¿es correcto?, ¿cuáles son las mejoras que incluían cada versión?

Creo recordar que, efectivamente, hubo tres versiones: RSC, el RSC 2.0 y el RSC II, pero lamento decir que no recuerdo las mejoras de cada una de ellas. Enseguida me compré un PC y el MSX quedó totalmente olvidado.

5. ¿Conservas alguna copia de esas versiones del RSC, Manuales, Código Fuente Original, etc?

Accidentalmente perdí los códigos fuente de todos los RSC, cosa que lamento porque me gustaría tenerlos.

6. ¿Tuviste contacto directo con alguno de los Colaboradores de la Revista (Willy MIragall, Carlos Mesa, Jesús Manuel Montané, Ronie Van Ginkel…)  y/o visitaste la Redacción de la MSX-Club?

Efectivamente, tuve contacto con casi todos los colaboradores de la revista y visité en muchas ocasiones la redacción de la MSX-Club. De hecho, ellos se pusieron en contacto conmigo para publicar el programa en su revista.

7. ¿Cuál era tu opinión sobre la Revista MSX-Club?, ¿y sobre los Redactores?.

Mi opinión era que la revista MSX-Club era la mejor que se podía encontrar y sus redactores eran gente seria.

8. ¿Alguna anécdota que nos puedas contar sobre tu relación con la MSX-CLUB o en general algo que nos quieras contar de aquella época dorada del MSX?

Hombre, anécdota en particular ninguna, simplemente tuve una buena relación con ellos.

9. No sé si después de la muerte comercial del MSX has seguido de alguna forma ligado al Sistema a través de Emuladores, de Foros, Web sobre el Sistema, etc. ¿Sigues en la actualidad el tema del MSX?, ¿usas algún Emulador o MSX Real?,  ¿estás al tanto de los Proyectos que han salido y van a salir? Por si no estás al tanto te dejo alguna información:

Cartucho MFR de Manuel Pazos para poder cargar imágenes DSK y juegos en formato “.dsk” en cualquier MSX, MSX-2, MSX-2+ o Turbo-R: 

https://www.msx.org/es/news/hardware/es/megaflashrom-scc-sd

Rookie Drive (es un proyecto que saldrá dentro de poco (de hecho acaba de salir ya) y que permite además conectar al MSX memorias USB para cargar Programas):

http://rookiedrive.com/es/inicio/

– Un nuevo modelo de MSX que vendría a ser un MSX “supervitaminado” y con muchísimas mejoras y ampliaciones: el MSX VroBit:

https://vrobit.com/en/blog/project-presentation-n2

Como te comentaba antes, poco después de un año me compré un PC y abandoné completamente el MSX. Desde entonces me he dedicado a la programación de los PC y actualmente hay un ensamblador para Windows (llamado Easy Code) que goza de muy buena prensa. Es gratuito y se puede bajar en  http://www.easycode.cat

10. ¿Sigues alguna Web o Foro relacionado con el MSX?

No.

11. ¿Cúales eran tus Juegos o Programas favoritos del MSX?

Lo cierto es que no lo recuerdo, pero es que más bien me dedicaba a programar utilidades.

12. ¿Qué opinabas sobre que la mayoría de los Juegos que nos llegaban fueran meras Conversiones de Spectrum?

Pues que me imagino que había pocos programadores de juegos que se dedicaran a MSX.

13. ¿Qué Programas llegaste a desarrollar para el MSX?, ¿Qué lenguajes usabas?, ¿llegaste a realizar algún Juego?

Desarrollé el Ensamblador RSC y un Programa de Utilidades (del tipo PC Tools) que permitía recuperar archivos borrados, etc.

14. Sobre el RSC, ¿cómo surgió comercializarlo a través de la MSX-Club?, ¿se lo pediste tú a la Revista presentándoles el Programa para que valoraran su comercialización?, ¿fue la Revista quién te lo pidió a ti?, ¿podrías darnos una aproximación sobre el número de copias que crees que se llegaron a vender de las diferentes versiones de tu RSC?

Envié el listado del código fuente de RSC a MSX-Club y Willy Miragall se puso en contacto conmigo. A partir de ese momento empezó mi relación con ellos.

15. ¿Qué supuso el MSX en tu vida?, ¿marcó el desarrollo de tu carrera profesional actual?

Efectivamente, supuso el inicio de mi carrera profesional. Actualmente, y desde hace muchos años, trabajo como programador de  aplicaciones para Windows.

16. Aparte del MSX, ¿fuiste Usuario de algún otro Sistema de 8 Bits o de 16 Bits?

Sí, como te comentaba antes, compré el primer modelo de IBM PC (un clon, para ser exacto) y desde entonces me he ido actualizando en este sistema. Actualmente tengo un ordenador con procesador Intel Core i7 6700 @ 3.40GHz.

17. Entiendo que el hecho de haber programado el RSC se debía a que te gustaba ese Lenguaje. ¿Cuál era la parte o funcionalidad de la que te sentiste más orgulloso al crear el RSC y qué era lo que menos te gustaba?, ¿Usas o usaste algún Ensamblador “cruzado” sobre PC para programar en MSX alguna vez?

En general me sentí y me siento orgulloso de RSC porque fue un programa importante en su momento, y así lo entendieron también en MSC-Club.

No, nunca  usé un Ensamblador “cruzado” sobre PC para programar en MSX.

18. Como Programador, ¿qué opinión te merecía el MSX?, ¿piensas que era realmente superior al resto de 8 Bits?, ¿piensas que el hecho de que hubiera tantos Modelos de MSX distintos con distintas con figuraciones de Memoria y pequeñas diferencias a nivel de Hardware eran una ventaja o un inconveniente?

En su momento creo que MSX fue el mejor ordenador personal que se podía tener. Lo que ocurrió es que enseguida apareció el IMB PC y aunque era muy superior también era muy caro, pero muy pronto aparecieron los “clones” a precios muy asequibles y eso marcó el fin del MSX.

19. ¿Llegaste a tener usar MSX-2, MSX-2+, MSX-Turbo R?

Llegué a tener un MSX-2

20. ¿Piensas que cualquier tiempo pasado fue mejor?, ¿qué ventajas e inconvenientes, o qué es lo que más te gusta y lo que menos te gusta de la Informática de los 8 Bits y de la Informática actual?, ¿A qué te dedicas en la actualidad?

Para mí la informática de 8 y 16 bits está totalmente obsoleta y hace más de una década que no trabajo con ella, incluso los 32 bits están empezando a pasar a la historia con la llegada de los 64 bits. Actualmente formo parte de un equipo de desarrollo de aplicaciones de una importante empresa catalana.

21. ¿Conservas en la actualidad algún vínculo-contacto con algún miembro de la MSX-CLUB?, ¿sabes algo de ellos?

No mantengo ningún contacto con nadie de MSX-Club ni sé nada de ninguno de ellos.

22. ¿Qué has pensado-sentido-…. cuándo has visto mi Correo y esta pseudo-“Entrevista”?, ¿te han venido recuerdos gratos que te ha apetecido “desenterrar” o te han dado ganas de echar a correr y no responder…?

Pues sí que me han venido buenos y gratos recuerdos, siempre los tendré, pero no me ha entusiasmado especialmente tener que responder a tantas preguntas porque no dispongo de mucho tiempo. Aun así, y por cortesía, lo estoy haciendo.

23. ¿Algo que quieras añadir  y que no esté reflejado en las anteriores preguntas?

Nada especial que no se haya dicho ya. El MSX fue un buen sistema que introdujo a mucha gente en el mundo informático.

Pues esto ha sido todo. Agradecerte Ramón que hayas respondido a mi Correo y que nos hayas dedicado esta parte de tu tiempo para responder a estas preguntas y a mi “malsana” curiosidad… 😉 




 

Pues lo dicho, desde aquí agradecer públicamente a Ramón el haberme dedicado parte de su tiempo y haber respondido a mi “batería” de preguntas… XD

Gracias & Saludetes. 😉

Publicado en Sin categoría | 3 comentarios

Listado TOKENS MSX – Cómo Ejecutar BASIC desde ENSAMBLADOR

¿Qué es un TOKEN?

Un TOKEN es un código que sustituye a un Comando Basic.

El MSX BASIC internamente nunca guarda en memoria el comando de forma “literal”, ya que esto ocuparía mucho espacio. Lo que hace después de finalizar la introducción/modificacion de una línea es reconocer todas los comandos usados y se sustituyen por sus respectivos códigos –> TOKEN.

El Ordenador, en su ROM, asigna a cada Comando un número y éste es el que se almacena cuando se utiliza dicho Comando.

Es decir, por ejemplo, para un comando PRINT, nuestro querido MSX  le asigna un valor numérico que se grabará con la instrucción.

Existe un truco muy simple para determinar la relación entre Comandos<–>Token. Introduzcamos en Basic esta línea:

10 REM Hola

El Token para el comando REM está inmediatamente después del número de línea. Sabiendo que la Dirección de inicio del Basic es &h8000 tenemos que nuestra línea se almacena a partir de la dirección &h8005. Si hacemos:

PRINT PEEK(&h8005) nos devuelve el valor 143 en decimal, que equivale a 8F en Hexadecimal. –> Luego sabremos que el Token asociado al Comando REM es el valor hexadecimal 8F.

Sustituyamos ahora ese Token por otro, haciendo esto:

POKE &h80005, &h91

Si ahora ejecutamos LIST veremos que nuestra línea ha cambiado y ahora tendremos:

10 PRINT Hola

Hagamos ahora POKE &h80005, &h84 y hagamos un LIST con lo que obtendremos ahora:

10 DATA Hola

Luego sabemos que el valor hexadecimal 84 es el Token asociando al comando DATA. Fácil, ¿verdad?. 😉

Para facilitarnos la vida y que no tengamos que comprobar uno por uno la relación entre Comandos Basic y Token aquí os dejo este Listado.

Nota: Para simplificar el Listado a nivel “visual” he omitido poner “H” o “&H” delante de cada Token / Dirección, pero debéis tener en cuenta que estamos hablando siempre de valores de Token y de Memoria hexadecimales.

Listado de Instrucciones BASIC con sus respectivos TOKEN y DIRECCIÓN

Comando  Token Dirección     Comando  Token Dirección
ABS      06    39E8          LOC      2C    3A34
AND      F6    3A18          LOCATE   D8    39DC
ASC      15    3A06          LOF      2D    3A36
ATN      0E    39F8          LOG      0A    39F0
ATTR$    E9    39FE          LPOS     1C    3A14
AUTO     A9    3973          LPRINT   9D    394C
BASE     C9    39BE          LSET     B8    399C
BEEP     C0    39AC          MAX      CD    39C6
BIN$     1D    3A16          MERGE    B6    3998
BLOAD    CF    39CA          MID$     03    39E2
BSAVE    D0    39CC          MKD$     30    3A3C
CALL     CA    39C0          MKI$     2E    3A38
CDBL     20    3A1C          MKS$     2F    3A3A
CHR$     16    3A08          MOD      FB    3A22
CINT     1E    3A18          MOTOR    CE    39C8
CIRCLE   BC    39A4          NAME     D3    39D2
CLEAR    92    3950          NEW      94    3954
CLOAD    9B    3962          NEXT     83    3932
CLOSE    B4    3994          NOT      E0    39EC
CLS      9F    396A          OCT$     1A    3A10
CMD      D7    39DA          OFF      EB    3A02
COLOR    BD    39A6          ON       95    3956
CONT     99    395E          OPEN     B0    398C
COPY     D6    39D8          OR       F7    3A1A
COS      0C    39F4          OUT      9C    3964
CSAVE    9A    3960          PAD      25    3A26
CSNG     1F    3A1A          PAINT    BF    39AA
CSRLIN   E8    39FC          PDL      24    3A24
CVD      2A    3A30          PEEK     17    3A0A
CVI      28    3A2C          PLAY     C1    39AE
CVS      29    3A2E          POINT    ED    3A06
DATA     84    3934          POKE     98    395C
DEF      97    395A          POS      11    39FE
DEFDBL   AE    3988          PRESET   C3    39B2
DEFINT   AC    3984          PRINT    91    394E
DEFSNG   AD    3986          PSET     C2    39B0
DEFSTR   AB    3982          PUT      B3    3992
DELETE   A8    397C          READ     87    393A
DIM      86    3938          REM      8F    394A
DRAW     BE    39A8          RENUM    AA    3980
DSKF     26    3A28          RESTORE  8C    3944
DSKI$    EA    3A00          RESUME   A7    397A
DSKO$    D1    39CE          RETURN   8E    3948
ELSE     A1    396E          RIGHT$   02    39E0
END      81    392E          RND      08    39EC
EOF      2B    3A32          RSET     B9    399E
EQU      F9    3A1E          RUN      8A    3940
ERASE    A5    3976          SAVE     BA    39A0
ERL      E1    39EE          SCREEN   C5    39B6
ERR      E2    39F0          SET      D2    39D0
ERROR    A6    3978          SGN      04    39E4
EXP      0B    39F2          SIN      09    39EE
FIELD    B1    398E          SOUND    C4    39B4
FILES    B7    39AA          SPACE$   19    397E
FIX      21    3A1E          SPACE$   19    3A0E
FN       DE    39E8          SPC      DF    39EA
FOR      82    3920          SPRITE   C7    39BA
FPOS     27    3A2A          SQR      07    39EA
FRE      0F    39FA          STEP     DC    39E4
GET      B2    3990          STICK    22    3A20
GOTO     89    393E          STOP     90    394C
GOSUB    8E    3948          STR$     13    3A02
GOTO     89    393E          STRIG    23    3A22
HEX$     1B    3A12          STRING$  E3    39F2
IF       8B    3942          SWAP     A4    3974
IMP      FA    3A20          TAB      DB    39E2
INKEY$   EC    3A04          TAN      0D    39F6
INP      10    39FC          THEN     DA    39E0
INPUT    85    3936          TIME     CB    39C2
INSTR    E5    39F6          TO       D9    39DE
INT      05    39E6          TROFF    A3    3972
IPL      D5    39D6          TRON     A2    3970
KEY      CC    3964          USING    E4    39F4
KILL     D4    39D4          USR      DD    39E6
LEFT$    01    39DE          VAL      14    3A04
LEN      12    3A00          VARPTR   E7    39FA
LET      88    393C          VDP      C8    39BC
LFILES   BB    39A2          VPEEK    18    3A0C
LINE     AF    398A          VPOKE    C6    39B8
LIST     93    3952          WAIT     96    3958
LLIST    9E    3968          WIDTH    A0    396C
LOAD     B5    3996          XOR      F8    3A1C

 

Ejecutar un Comando BASIC desde Ensamblador

Veamos ahora un ejemplo práctico del uso de los TOKEN…

Imaginemos que estás haciendo un Programa Ensamblador y necesitas ejecutar un Comando BASIC. Evidentemente puedes hacer el equivalente a dicho Comando a base de instrucciones Ensamblador pero si no dominas el tema puede que te resulte complejo. Algo tan simple como grabar un Programa en Disco supongo que requeriría muchas o bastantes líneas de Código lo cual implicaría además que tienes que conocer cómo funciona la Unidad de Disco, qué Rutinas de la BIOS utiliza, etc, etc, etc.

La idea Básica para hacer esto sería:

– Primero obtener la Dirección de la Instrucción BASIC que queremos ejecutar (podéis obtenerla de la Tabla que os  he puesto arriba).

– Definir una línea BASIC “virtual, que va a contener los parámetros necesarios que van a acompañar a esa Función.

– Importante acabar nuestra línea BASIC “virtual” con “&H00“.

Vamos a ver un ejemplo “chorra” en el que vamos a ejecutar desde Ensablador la instrucción: BSAVE”PATATA.BIN”, &HC000, &HC119

Es decir, vamos a grabar un Programa en Disco que se llama PATATA.BIN y que tiene como Dirección Inicial &HC000 y como Dirección Final &HC110.

El “complejo” Código sería este:

RSC II MSX 1.0                                                

   10 		ORG  &HC000
   20 BSAVEDSK:	EQU  &H39CC
   30 CHGET:	EQU  &H9F
   40 CALBAS:	EQU  &H159
   50 		LD   HL, LINBAS
   60 		LD   IX, (BSAVEDSK)
   70 		CALL CALBAS
   80 		CALL CHGET
   90 		RET 
  100 LINBAS:	DEFB &H22
  110 		DEFM "PATATA.BIN"
  120 		DEFB &H22
  130 		DEFM ",&HC000"
  140 		DEFM ",&HC119"
  150 		DEFB &H00
  160 FIN:	NOP

El Programa está hecho usando el Ensamblador/Desensamblador para MSX RSC II.

Vamos allá con las explicaciones:

– En la línea 10 indicamos a partir de que dirección queremos ubicar el Código del Programa. En nuestro caso: &HC000
– En la línea 20 tenemos la Dirección de la Instrucción BSAVE.
– La línea 30 tiene como finalidad que pulsemos una Tecla.
– La línea 40 nos servirá para ejecutar la Instrucción BSAVE.
– En la línea 50 hacemos que HL apunte a una falsa línea en Basic (LINBAS)
– En la línea 60 cargamos la dirección de la Rutina BSAVE.
– En la línea 70 ejecutamos la instrucción BSAVE.
– En la línea 80 esperamos a que se pulse una Tecla.
– En la línea 100 y posteriores definimos nuestra línea Basic “virtual” en la lo que hacemos simplemente es definir todos los argumentos-parámetros necesarios para completar la Instrucción BSAVE (lo que pongo abajo en negrita)

BSAVE “PATATA.BIN”, &HC000, &HC119

Pues bien, yo con lo que me liaba, entre otras cosas era en la definición de todos esos parámetros que pongo en negrita. No sabía como poner las comillas usando la instrucción DEFM, ya que no sería posible hacer esto: DEFM “”PATATA.BIN”” (no podemos meter el caracter “comillas”) así que lo tendremos que hacer por partes, es decir:

– En la línea 120 lo que hacemos es definir las “comillas” (&H22)
– En la línea 130 el nombre del Fichero (PATATA.BIN)
– En la línea 140 otra vez las comillas (&H22)
– Muy importante en la línea 150 hacemos que nuestra instrucción acabe con &H00.

La verdad es que se me antoja una opción muy potente el usar este método para ejecutar comandos y funciones BASIC desde nuestros programas en Ensamblador.

Toda esta Info viene recogida en el Libro-Manual “MSX TOP SECRET“, en concreto en el Tema 2 páginas 36 a 39. ¡¡¡1.000 gracias a su autor por toda esta Info!!!

Las Aplicaciones prácticas de todo ésto son ¡INFINITAS! y seguro que os pueden sacar de algún apuro en vuestro Programa Ensamblador. No sé si es la mejor forma, ni la más pedagógica pero desde luego seguro que es la más sencilla para hacer pruebas rápidas en vuestros Programas y no complicaros la vida si no domináis el Ensamblador. 😉

Nota: Las explicaciones del principio las he tomado del Libro “MSX – Consejos y Trucos“, de Data Becker.

Publicado en Sin categoría | Deja un comentario

MSX BASIC

MSX BASIC 1.0

  • ABS
  • AND
  • AS #
  • ASC
  • ATN
  • AUTO
  • BASE
  • BEEP
  • BIN$
  • BLOAD
  • BSAVE
  • CALL
  • CDBL
  • CHR$
  • CINT
  • CIRCLE
  • CLEAR
  • CLOAD
  • CLOAD?
  • CLOSE #
  • CLS
  • COLOR
  • CONT
  • COS
  • CSAVE
  • CSNG
  • CSRLIN
  • DATA
  • DEF FN
  • DEFDBL
  • DEFINT
  • DEFSNG
  • DEFSTR
  • DEFUSR
  • DELETE
  • DIM
  • DRAW
  • END
  • EOF
  • ERASE
  • ERR
  • ERL
  • ERROR
  • EQV
  • EXP
  • FIX
  • FOR TO STEP
  • FRE
  • GOSUB
  • GOTO
  • HEX$
  • IF THEN ELSE
  • INKEY$
  • IMP
  • INP
  • INPUT
  • INPUT$
  • INSTR
  • INT
  • INTERVAL ON/OFF/STOP
  • KEY
  • KEY LIST
  • KEY ON/OFF
  • KEY ON/OFF/STOP
  • FOR TO STEP NEXT
  • LEFT$
  • LEN
  • LET
  • LINE
  • LINE INPUT
  • LIST
  • LLIST
  • LOAD
  • LOCATE
  • LOG
  • LPOS
    LPRINT
  • MAXFILES
  • MERGE
  • MID$
  • MOD
  • MOTOR
  • NEW
  • NOT
  • OCT$
  • ON ERROR GOTO
  • ON GOSUB
  • ON GOTO
  • ON INTERVAL GOSUB
  • ON KEY GOSUB
  • ON SPRITE GOSUB
  • ON STOP GOSUB
  • ON STRIG GOSUB
  • OPEN
  • OR
  • OUT
  • PAD
  • PAINT
  • PDL
  • PEEK
  • PLAY
  • PLAY()
  • POINT
  • POKE
  • POS
  • PRESET
  • PRINT
  • PSET
  • PUT SPRITE
  • READ
  • REM
  • RENUM
  • RESTORE
  • RESUME
  • RETURN
  • RIGHT$
  • RND
  • RUN
  • SAVE
  • SCREEN
  • SGN
  • SIN
  • SOUND
  • SPACE$
  • SPC
  • SPRITE ON/OFF/STOP
  • SPRITE$
  • SQR
  • STICK
  • STOP
  • STOP ON/OFF/STOP
  • STRIG
  • STRIG ON/OFF/STOP
  • STR$
  • STRING$
  • SWAP
  • TAB
  • TAN
  • TIME
  • TROFF
  • TRON
  • USR
  • VAL
  • VARPTR
  • VDP
  • VPEEK
  • VPOKE
  • WAIT
  • WIDTH
  • XOR

MSX BASIC 2.0[editar]

  • COLOR SPRITE
  • COLOR SPRITE$
  • COLOR=
  • COLOR=RESTORE
  • COLOR=NEW
  • CALL MEMINI
  • CALL MKILL
  • CALL MNAME
  • CALL MFILES
  • SET PAGE
  • SET VIDEO
  • SET ADJUST
  • SET BEEP
  • SET TITLE
  • SET PASSWORD
  • SET PROMPT
  • SET SCREEN
  • SET DATE
  • SET TIME
  • GET DATE
  • GET TIME

MSX BASIC 3.0[editar]

  • SET SCROLL

MSX BASIC 4.0[editar]

  • CALL PAUSE
  • CALL PCMPLAY
  • CALL PCMREC

 

 

Publicado en Sin categoría | Deja un comentario