Diferencias
Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previa | ||
012:utilidades [d/m/Y H:i] – creado miguel | 012: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) ===== |
{{ : | {{ : | ||
Línea 19: | Línea 19: | ||
* para mayor comodidad de uso, después del " | * para mayor comodidad de uso, después del " | ||
* 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 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, | ||
+ | |||
+ | ==== 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;' | + | CP 234 ;' |
- | 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:' | + | CP 248 |
- | JR Z.TSAVE COMANDO PARA BIFURCARA | + | JR Z,TSAVE COMANDO PARA BIFURCARA |
- | CP 239:' | + | CP 239 |
- | JP Z.TLOAD | + | JP Z,TLOAD |
- | CP 214;' | + | CP 214 ;' |
- | JP Z.TVERIF | + | JP Z,TVERIF |
- | CP 213: -MERGE | + | CP 213 |
- | JR Z.TMERGE | + | JR Z,TMERGE |
- | JR ERRORA SI NINGUNO EXISTE. SALTA 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:' | + | DEFB 5; ' |
- | ERRORA RST 8 | + | ERRORA RST 8 |
- | DEFB 9;' | + | DEFB 9; ' |
- | ERRORB RST 8 | + | ERRORB RST 8 |
- | DEFB 10; ' | + | DEFB 10; ' |
- | ERRORC RST 8 | + | ERRORC RST 8 |
- | DEFB 11; NONSENSE IN BASIC' | + | DEFB 11; NONSENSE IN BASIC' |
- | ERRORF RST 8 | + | ERRORF RST 8 |
- | DEFB 14: INVALID ARGUMENT' | + | DEFB 14; INVALID 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 ' | + | 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 " | + | PUSH AF PRESERVA EL INDICADOR DE " |
- | LD MFD ABRE CANAL (j | + | LD A,#FD ABRE CANAL 0 |
- | CALL # | + | CALL # |
- | XOR A | + | XOR A |
- | LD DE# | + | LD DE,#9A1 MENSAJE "START TAPE..." |
- | CALL #C0A | + | CALL # |
- | SET 5, | + | SET 5, |
- | CALL # | + | CALL # |
- | LD IX.CABEC PUNTERO PARA EL BUFFER DE CABECERA. | + | LD IX,CABEC PUNTERO PARA EL BUFFER DE CABECERA. |
- | LD DE, | + | 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 " | + | POP AF RECUPERA " |
- | LD DE.ILONT) LONGITUD DEL BLOQUE A SALVAR. | + | LD DE,(LONT) LONGITUD DEL BLOQUE A SALVAR. |
- | LD A.ffF SEÑAL " | + | LD A,#FF SEÑAL " |
- | LD IX, | + | LD IX, |
- | 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 " | + | INC HL |
- | CP 13 | + | LD A,(HL) AL FINAL DEBE HABER UN " |
- | JR NZ, | + | CP 13 |
- | CALL RELOAD CARGA LA CABECERA. | + | JR NZ, |
- | 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 | + | INC BC |
- | LO |HL),#8tf PONE UN INDICADOR DE FIN EN LA LOCALIZACION EXTRA. | + | RST 48 CREA EN EL AREA DE TRABAJO " |
- | 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 " | + | CALL LMBYT CARGA EL BLOQUE DEL PROGRAMA. |
- | TVERIF CALL LDPREV INICIALIZA VALORES. | + | JP 2253 EFECTUA LA OPERACION DE " |
- | RES (j,|IY+37) SEÑAL " | + | TVERIF CALL LDPREV INICIALIZA VALORES. |
- | JR NC.LDBYTE SALTA SI NO ES UN PROGRAMA BASIC. | + | RES 0,(IY+37) SEÑAL " |
- | 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.L | + | JR Z,ADDS PARA CREAR ESPACIO. |
- | EX DE.HL | + | LD B,H RECLAMA LOS BYTES SOBRANTES. |
- | CALL «19E8 | + | LD C,L |
- | 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 ' | + | AND A |
- | LD C,L | + | SBC HL,DE |
- | EX DE.HL | + | LD B,H |
- | 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), | + | 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), |
- | 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 |
- | RET C | + | JR Z,VBYT |
- | JP ERRORR | + | LMBYT SCF |
- | LDBYTE AND A SE EFECTUA UN CHEQUEO DEL REGISTRO " | + | 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 " |
- | 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, | + | 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, |
- | 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 " | + | 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 " |
- | 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.C | + | LD HL,NOMBRE |
- | ADD A.B | + | LD B,10 |
- | LD C.A | + | LD A, |
- | LDNAME LD A.(DE) | + | INC A |
- | CP (HL) | + | JR NZ,LDNAME |
- | INC HL | + | LD A,C |
- | INC DE | + | ADD A,B |
- | JR NZ.LDPR | + | LD C,A |
- | INC C | + | LDNAME LD A,(DE) |
- | LDPR RST 16 | + | CP (HL) |
- | DJNZ LDNAME | + | INC HL |
- | BIT 7, | + | 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 | ||
</ | </ |