012:utilidades

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
012:utilidades [d/m/Y H:i] – creado miguel012:utilidades [d/m/Y H:i] (actual) – [Listado ensamblador] miguel
Línea 1: Línea 1:
 ====== Microhobby 12. Año II, del 22 al 28 de enero de 1985 ====== ====== Microhobby 12. Año II, del 22 al 28 de enero de 1985 ======
  
-Utilidades: Carga y almacenamiento de programas con velocidad variable (II)+===== Utilidades: Carga y almacenamiento de programas con velocidad variable (II) =====
  
 {{ :012:utilidades.jpg|}} {{ :012:utilidades.jpg|}}
Línea 19: Línea 19:
   * para mayor comodidad de uso, después del "REM" deben colocarse dos puntos; así obtendremos fácilmente los "TOKENS" de SAVE, LOAD, VERIFY o MERGE.   * para mayor comodidad de uso, después del "REM" deben colocarse dos puntos; así obtendremos fácilmente los "TOKENS" de SAVE, LOAD, VERIFY o MERGE.
   * La rutina está pensada para que a velocidad normal (1.500 baudios) sea plenamente compatible con el sistema operativo del ordenador; sin embargo, quisiéramos matizar de nuevo que a altas velocidades de transferencia de información, la precisión con la que este proceso ocurre, depende de las características físicas del aparato de cassette utilizado.   * La rutina está pensada para que a velocidad normal (1.500 baudios) sea plenamente compatible con el sistema operativo del ordenador; sin embargo, quisiéramos matizar de nuevo que a altas velocidades de transferencia de información, la precisión con la que este proceso ocurre, depende de las características físicas del aparato de cassette utilizado.
 +
 +==== Listado ensamblador ====
  
 <code z80> <code z80>
-ORG 60M0 + ORG 60000 
-LD HL,|23645) TOMA LA DIRECCION CH-ADD PARA SINTAXIS INICIAL. + LD HL,(23645) TOMA LA DIRECCION CH-ADD PARA SINTAXIS INICIAL. 
-INC HL + INC HL 
-LD A.(HL) + LD A,(HL) 
-CP 234;'REM' COMPRUEBA LA PRESENCIA DE "REM" + CP 234 ;'REM' COMPRUEBA LA PRESENCIA DE "REM" 
-JR NZ.ERRORA Y":" + JR NZ,ERRORA Y ":" 
-INC HL + INC HL 
-LD A.(HL) SI NO EXISTEN. SALTA A ERROR + LD A,(HL) SI NO EXISTEN. SALTA A ERROR 
-CP ":" + CP ":" 
-JR NZ.ERRORA + JR NZ,ERRORA 
-INC HL + INC HL 
-LD A,(HL| EXAMINA LOS SIGUIENTES + LD A,(HL) EXAMINA LOS SIGUIENTES 
-CP 248:'SAVE CARACTERES DE LA LINEA DE + CP 248 ;'SAVE' CARACTERES DE LA LINEA DE 
-JR Z.TSAVE COMANDO PARA BIFURCARA + JR Z,TSAVE COMANDO PARA BIFURCARA 
-CP 239:'LOAD' LA SUBRUTINA CORRESPONDIENTE. + CP 239 ;'LOAD' LA SUBRUTINA CORRESPONDIENTE. 
-JP Z.TLOAD + JP Z,TLOAD 
-CP 214;'VERIFY' + CP 214 ;'VERIFY' 
-JP Z.TVERIF + JP Z,TVERIF 
-CP 213: -MERGE + CP 213 ;'MERGE' 
-JR Z.TMERGE + JR Z,TMERGE 
-JR ERRORA SI NINGUNO EXISTESALTA A ERROR. + JR ERRORA SI NINGUNO EXISTE SALTA A ERROR. 
-ERROR6 RST 8 LLAMADAS A LA SUBRUTINA ROM DE MENSAJES DE ERROR +ERROR6 RST 8 LLAMADAS A LA SUBRUTINA ROM DE MENSAJES DE ERROR 
-DEFB 5:'NUMBER'TOO BIG' + DEFB 5'NUMBER'TOO BIG' 
-ERRORA RST 8 +ERRORA RST 8 
-DEFB 9;'INVALID ARGUMENT + DEFB 9; 'INVALID ARGUMENT 
-ERRORB RST 8 +ERRORB RST 8 
-DEFB 10; 'INTEGER OUT OF RANGE' + DEFB 10; 'INTEGER OUT OF RANGE' 
-ERRORC RST 8 +ERRORC RST 8 
-DEFB 11; NONSENSE IN BASIC' + DEFB 11; NONSENSE IN BASIC' 
-ERRORF RST 8 +ERRORF RST 8 
-DEFB 14INVALID ARGUMENT' + DEFB 14INVALID ARGUMENT' 
-ERRORR RST 8 +ERRORR RST 8 
-DEFB 26:'TAPE LOADING ERROR' + DEFB 26'TAPE LOADING ERROR' 
-TSAVE CALL BAUDIO TOMA EL NUMERO INDICADOR DELA VELOCIDAD DE GRABA- +TSAVE CALL BAUDIO TOMA EL NUMERO INDICADOR DELA VELOCIDAD DE GRABA- 
-CALL NAME CION. NOMBRE Y SI SU LONGITUD ES + CALL NAME CION. NOMBRE Y SI SU LONGITUD ES 
-JR C.ERRORF CERO O MAYOR QUE 10. SALTA A ERROR. + JR C,ERRORF CERO O MAYOR QUE 10. SALTA A ERROR. 
-CALL SINTAX COGE EL RESTO DE LOS DATOS. + CALL SINTAX COGE EL RESTO DE LOS DATOS. 
-PUSH AF PRESERVA EL INDICADOR DE "TIPO"+ PUSH AF PRESERVA EL INDICADOR DE "TIPO"
-LD MFD ABRE CANAL (j + LD A,#FD ABRE CANAL 0 
-CALL #1601 + CALL #1601 
-XOR A + XOR A 
-LD DE#9A1 MENSAJE "START TAPE..." + LD DE,#9A1 MENSAJE "START TAPE..." 
-CALL #C0A + CALL #C0A 
-SET 5,(IY+2) FLAG PARA BORRAR MENSAJE. + SET 5,(IY+2) FLAG PARA BORRAR MENSAJE. 
-CALL #15D4 ESPERAR PULSACION TECLA. + CALL #15D4 ESPERAR PULSACION TECLA. 
-LD IX.CABEC PUNTERO PARA EL BUFFER DE CABECERA. + LD IX,CABEC PUNTERO PARA EL BUFFER DE CABECERA. 
-LD DE,17 LONGITUD DEL BUFFER. + LD DE,17 LONGITUD DEL BUFFER. 
-XOR A INDICA "ES UNA CABECERA", + XOR A INDICA "ES UNA CABECERA", 
-CALL SAVE SALVA LA CABECERA. + CALL SAVE SALVA LA CABECERA. 
-LD B.#32 + LD B,#32 
-HALT SE PRODUCE UN RETARDO ANTES DE SALVAR EL SEGUNDO +PSAV HALT SE PRODUCE UN RETARDO ANTES DE SALVAR EL SEGUNDO 
-DJNZ PSAV BLOQUE. + DJNZ PSAV BLOQUE. 
-POP AF RECUPERA "TIPO" + POP AF RECUPERA "TIPO" 
-LD DE.ILONT) LONGITUD DEL BLOQUE A SALVAR. + LD DE,(LONT) LONGITUD DEL BLOQUE A SALVAR. 
-LD A.ffF SEÑAL "BLOQUE DE DATOS"+ LD A,#FF SEÑAL "BLOQUE DE DATOS"
-LD IX,(23635) SI ES UN PROGRAMA. TOMA DIR. DE COMIENZO. + LD IX,(23635) SI ES UN PROGRAMA. TOMA DIR. DE COMIENZO. 
-JR C FSAV + JR C FSAV 
-LD IX.(DIRT) SI NO. LA DIRECCION ESPECIFICADA EN EL COMANDO. + LD IX,(DIRT) SI NO. LA DIRECCION ESPECIFICADA EN EL COMANDO. 
-FSAV CALL SAVE RET +FSAV CALL SAVE 
-TMERGE CALL BAUDIO + RET 
-CALL NAME +TMERGE CALL BAUDIO 
-CALL C.CPNAME COMPRUEBA QUE EL FINALES'"' + CALL NAME 
-INC HL + CALL C,CPNAME COMPRUEBA QUE EL FINAL ES'"' 
-LD A.(HL) AL FINAL DEBE HABER UN "ENTER"+ INC HL 
-CP 13 + LD A,(HL) AL FINAL DEBE HABER UN "ENTER"
-JR NZ,ERRORC + CP 13 
-CALL RELOAD CARGA LA CABECERA. + JR NZ,ERRORC 
-LD BC.(LONBUF| LONGITUD TOTAL DEL PROGRAMA + CALL RELOAD CARGA LA CABECERA. 
-PUSH BC + LD BC,(LONBUF) LONGITUD TOTAL DEL PROGRAMA 
-INC BC + PUSH BC 
-RST 48 , CREA EN EL AREA DE TRABAJO "BC+1" ESPACIOS. + INC BC 
-LO |HL),#8tf PONE UN INDICADOR DE FIN EN LA LOCALIZACION EXTRA. + RST 48 CREA EN EL AREA DE TRABAJO "BC+1" ESPACIOS. 
-EX DE.HL + LD (HL),#80 PONE UN INDICADOR DE FIN EN LA LOCALIZACION EXTRA. 
-POP DE + EX DE,HL 
-PUSH HL + POP DE 
-BUSH HL + PUSH HL 
-POP IX + PUSH HL 
-LD A.*FF + POP IX 
-CALL LMBYT CARGA EL BLOQUE DEL PROGRAMA. + LD A,#FF 
-JP 2253 EFECTUA LA OPERACION DE "MERGE"+ CALL LMBYT CARGA EL BLOQUE DEL PROGRAMA. 
-TVERIF CALL LDPREV INICIALIZA VALORES. + JP 2253 EFECTUA LA OPERACION DE "MERGE"
-RES (j,|IY+37) SEÑAL "VERIFICANDO"+TVERIF CALL LDPREV INICIALIZA VALORES. 
-JR NC.LDBYTE SALTA SI NO ES UN PROGRAMA BASIC. + RES 0,(IY+37) SEÑAL "VERIFICANDO"
-JR CPROG VERIFICA EL PROGRAMA BASIC. + JR NC,LDBYTE SALTA SI NO ES UN PROGRAMA BASIC. 
-LDPREV CALL BAUDIO TOMA LOS VALORES DEL COMANDO. + JR CPROG VERIFICA EL PROGRAMA BASIC. 
-CALL NAME COMPRUEBA SINTAXIS Y CARGA LA CABECERA. +LDPREV CALL BAUDIO TOMA LOS VALORES DEL COMANDO. 
-CALL C.CPNAME + CALL NAME COMPRUEBA SINTAXIS Y CARGA LA CABECERA. 
-CALL NSINT + CALL C,CPNAME 
-PUSH AF PRESERVA EL INDICADOR DE TIPO. + CALL NSINT 
-CALL RELOAD + PUSH AF PRESERVA EL INDICADOR DE TIPO. 
-POP AF LO RECUPERA. + CALL RELOAD 
-RET + POP AF LO RECUPERA. 
-TLOAD CALL LDPREV + RET 
-SET (j.|IY+37) SEÑAL "CARGA EL BLOQUE"+TLOAD CALL LDPREV 
-JR NC.LDBYTE SALTA SI NO ES UN PROGRAMA BASIC. + SET 0,(IY+37) SEÑAL "CARGA EL BLOQUE"
-LD DE.(LONBUF| TOMA LONGITUD TOTAL DEL BLOQUE A CARGAR. + JR NC,LDBYTE SALTA SI NO ES UN PROGRAMA BASIC. 
-LD HL.I23635+ LD DE,(LONBUF) TOMA LONGITUD TOTAL DEL BLOQUE A CARGAR. 
-ADD HL.DE MIRA SI EL PROGRAMA A CARGAR ES MENOR QUE EL PRO- + LD HL,(23635
-EX DE.HL GRAMA RESIDENTE. + ADD HL,DE MIRA SI EL PROGRAMA A CARGAR ES MENOR QUE EL PRO- 
-LD HL.I23641) SCF + EX DE,HL GRAMA RESIDENTE. 
-SBC HL.DE + LD HL,(23641) 
-JR C.ADDS SIES MAYOR O IGUAL. SALTA + SCF 
-JR Z.ADDS PARA CREAR ESPACIO. + SBC HL,DE 
-LD B.H RECLAMA LOS BYTES SOBRANTES. + JR C,ADDS SI ES MAYOR O IGUAL. SALTA 
-LD C.+ JR Z,ADDS PARA CREAR ESPACIO. 
-EX DE.HL + LD B,H RECLAMA LOS BYTES SOBRANTES. 
-CALL «19E8 + LD C,
-JR PPL + EX DE,HL 
-ADDS ADD HL.DE CREA ESPACIO SUFICIENTE EN MEMORIA PARA EL NUEVO + CALL #19E8 
-EX DE.HL PROGRAMA. + JR PPL 
-AND A +ADDS ADD HL,DE CREA ESPACIO SUFICIENTE EN MEMORIA PARA EL NUEVO 
-SBC HL.DE + EX DE,HL PROGRAMA. 
-LD B.+ AND A 
-LD C,L + SBC HL,DE 
-EX DE.HL + LD  B,
-CALL »1655 + LD C,L 
-PPL LD HL.(23635) ASIGNA LA DIRECCION CORRECTA DE LAS VARIABLES DE + EX DE,HL 
-LD BC.(INFBUF) PROGRAMA. + CALL #1655 
-ADD HL.BC +PPL LD HL,(23635) ASIGNA LA DIRECCION CORRECTA DE LAS VARIABLES DE 
-LD (23627),HL + LD BC,(INFBUF) PROGRAMA. 
-LD HL(DIBUF) MIRA SI EL PROGRAMA BASIC SE AUTOEJECUTA Y EN QUE U+ ADD HL,BC 
-LD A.H NEA. + LD (23627),HL 
-AND *C0 + LD HL,(DIBUF) MIRA SI EL PROGRAMA BASIC SE AUTOEJECUTA Y EN QUE LI
-JR NZ.CPROG + LD A,H NEA. 
-LD (23618I.HL SI ES ASI. HACE UNA COPIA. + AND #C0 
-LD |IY+101.0 SEÑALA PRIMERA INSTRUCCION DE LA LINEA. + JR NZ,CPROG 
-CPROG LD DE.ILONBUF+ LD (23618),HL SI ES ASI. HACE UNA COPIA. 
-LD IX.(23635) + LD (IY+10),0 SEÑALA PRIMERA INSTRUCCION DE LA LINEA. 
-CARGA LD A.«FF +CPROG LD DE,(LONBUF
-BIT 0 .(IY+37Í EXAMINA "LOAD O VERIFY + LD IX,(23635) 
-JR Z.VBYT LMBYT SCF +CARGA LD A,#FF 
-VBYT CALL LOAD + BIT 0 ,(IY+37) EXAMINA "LOAD O VERIFY" 
-RET C + JR Z,VBYT 
-JP ERRORR +LMBYT SCF 
-LDBYTE AND A SE EFECTUA UN CHEQUEO DEL REGISTRO "A" PARA DETER- +VBYT CALL LOAD 
-JR NZ.INDEF MINAR EL TIPO DE CARGA + RET C 
-LD IX.16384 A=0 INDICA "LOAD SCREENS"+ JP ERRORR 
-LD DE.(LONT) A=1 INDICA "LOAD CODE"+LDBYTE AND A SE EFECTUA UN CHEQUEO DEL REGISTRO "A" PARA DETER- 
-LD HL(LONBUF) A=2 INDICA "LOAD CODE XXXX"+ JR NZ,INDEF MINAR EL TIPO DE CARGA 
-AND A A=3 INDICA "LOAD CODE XXXX. XXXX"+ LD IX,16384 A=0 INDICA "LOAD SCREENS"
-SBC HL.DE JP + LD DE,(LONT) A=1 INDICA "LOAD CODE"
-JR CARGA + LD HL,(LONBUF) A=2 INDICA "LOAD CODE XXXX"
-INDEF CP 2 + AND A A=3 INDICA "LOAD CODE XXXX. XXXX"
-JR NC(DIDEF) + SBC HL,DE 
-LD IX.(DIBUF) + JP NZ,ERRORR 
-DEFLO LD DE.(LONBUF) + JR CARGA 
-JR CARGA +INDEF CP 2 
-DIDEF LD IX.IDIRT+ JR NC(DIDEF) 
-JR NZ.TODEF + LD IX,(DIBUF) 
-JR DEFLO +DEFLO LD DE,(LONBUF) 
-TODEF LD DE,(LONT) + JR CARGA 
-JR CARGA +DIDEF LD IX,(DIRT
-RELOAD LD IX.BUFCAB DIRECCION DE CARGA DE LA CABECERA. + JR NZ,TODEF 
-LD DE.17 + JR DEFLO 
-XOR A SCF +TODEF LD DE,(LONT) 
-CALL LOAD + JR CARGA 
-JR NC.RELOAD SI ERROR. INSISTE. +RELOAD LD IX,BUFCAB DIRECCION DE CARGA DE LA CABECERA. 
-RES (j.|IY+82) ABRE CANAL SUPERIOR DE PANTALLA. + LD DE,17 
-LD 82 PREVEE SCROLL DE TRES LINEAS. + XOR A 
-LD HL.CABEC DIRECCION PUNTERO CABECERA ESPECIFICADA. + SCF 
-LD C.128 SEÑAL "DIFERENTE TIPO"+ CALL LOAD 
-LD A.(BUFCAB) + JR NC,RELOAD SI ERROR. INSISTE. 
-CP (HL) COMPARA AMBAS CABECERAS. + RES 0,(IY+2) ABRE CANAL SUPERIOR DE PANTALLA. 
-JR NZ.LDTIP SALTA SI NO SON IGUALES. + LD (IY+82),3 PREVEE SCROLL DE TRES LINEAS. 
-LD C.246 SEÑAL "id CARACTERES IGUALES"+ LD HL,CABEC DIRECCION PUNTERO CABECERA ESPECIFICADA. 
-LDTIP CP 4 SI EL TIPO DE BLOQUE ES MAYOR + LD C,128 SEÑAL "DIFERENTE TIPO"
-JR NC.RELOAD QUE 3.CARGA NUEVA CABECERA + LD A,(BUFCAB) 
-LD DE. »900 + CP (HL) COMPARA AMBAS CABECERAS. 
-PUSH BC IMPRIME EL MENSAJE ASOCIADO A CADA TIPO DE BLOQUE + JR NZ,LDTIP SALTA SI NO SON IGUALES. 
-CALL «C0A Y EL NOMBRE DEL BLOQUE ENTRANTE. + LD C,246 SEÑAL "10 CARACTERES IGUALES"
-POP BC +LDTIP CP 4 SI EL TIPO DE BLOQUE ES MAYOR 
-LD DE.BUFNAM + JR NC,RELOAD QUE 3,CARGA NUEVA CABECERA 
-LD HL.NOMBRE + LD DE,#9C0 
-LD B.10 + PUSH BC IMPRIME EL MENSAJE ASOCIADO A CADA TIPO DE BLOQUE 
-LD A,(HL) + CALL #C0A Y EL NOMBRE DEL BLOQUE ENTRANTE. 
-INC A + POP BC 
-JR NZ.LDNAME + LD DE,BUFNAM 
-LD A.+ LD HL,NOMBRE 
-ADD A.+ LD B,10 
-LD C.+ LD A,(HL) 
-LDNAME LD A.(DE) + INC A 
-CP (HL) + JR NZ,LDNAME 
-INC HL + LD A,
-INC DE + ADD A,
-JR NZ.LDPR + LD C,
-INC C +LDNAME LD A,(DE) 
-LDPR RST 16 + CP (HL) 
-DJNZ LDNAME + INC HL 
-BIT 7,C EXAMINA SI EL TIPO Y EL NOMBRE + INC DE 
-JR NZ.RELOAD ENTRANTES COINCIDEN. + JR NZ,LDPR 
-LD A.13 + INC C 
-RST 16 +LDPR RST 16 
-RET _+ DJNZ LDNAME 
 + BIT 7,C EXAMINA SI EL TIPO Y EL NOMBRE 
 + JR NZ,RELOAD ENTRANTES COINCIDEN. 
 + LD A,13 
 + RST 16 
 + RET
 </code> </code>
  • 012/utilidades.1291476274.txt.gz
  • Última modificación: d/m/Y H:i
  • por miguel