Quantum Forth Z80 (versión 1)

Descripción del contenido de la página

Ensamblador del microprocesador Z80, escrito en Forth para QL.

Etiquetas:

Esta segunda versión usa cálculos y agrupaciones para reducir el número de palabras necesarias, pero aún conserva palabras que representan la instrucción con sus registros. Por otra parte, cambia la notación de las instrucciones de Z80 (usa corchetes en lugar de paréntesis) e incluye palabras para transmitir el código objeto desde la QL a la ZX Spectrum por una conexión serial.

Código fuente

El fichero original de 1988 estaba escrito para Computer One Forth, en formato de fichero de bloques de Forth, y con la codificación de caracteres de QL. Para facilitar su publicación y reutilización, lo convertí en un fichero de texto de formato estándar y codificado con UTF-8.
\ QUANTUM FORTH Z80 v1

\ Copyright (C) 1988 Marcos Cruz (programandala.net)
\ Licencia/Permesilo/License:
\ http://programandala.net/license

\ http://programandala.net/es.programa.quantum_forth_z80.html

\ 1988: Escrito para el Forth de Computer One de Sinclair QL.
\ 2015-03-13: Convertido del formato de bloques original a fichero
\ estándar. Textos y comentarios corregidos. Pequeños cambios de
\ formato.

\ HERRAMIENTAS .................................................

: OVERLAY ;

\ VOCABULARY QUANTUM_Z80 IMMEDIATE  QUANTUM_Z80 DEFINITIONS

: .TIEMPO .DATE .TIME ;
: GEMINI10X PRINTER
  0 55 27    ( juego de caracteres USA)
  11 0 67 27 ( papel de 11 pulgadas)
  3 82 27    ( inicio de pagina en la tercera linea)
  3 78 27    ( salto de perforacion al quedar tres lineas)
  13 0 DO EMIT LOOP
  ;

\ LISTAR .......................................................

: LLIST ( pantalla_inicial,pantalla_final--)
  GEMINI10X .TIEMPO CR
  1+ SWAP
  DO
    16 0
    DO
      I J DUP  0 <# # # # #> TYPE SPACE
          OVER 0 <# # # #>   TYPE SPACE
      .LINE CR
    LOOP
  LOOP
  CR .TIEMPO CR CONSOLE
  ;

\ MANEJO DE LA PILA ............................................

: DEPTH2/ DEPTH 2 / ;
: VACIA_PILA S0 @ SP! ;

: TEXTO->PILA ( dir_txt--...texto...)
  DUP         ( dir_txt,dir_txt)
  COUNT       ( dir_txt,dir_car_inicial,n_car)
  ROT         ( dir_car,n_car,dir_txt)
  +           ( dir_car_inicial,dir_car_final)
  DO
    I         ( dir_car)
    C@        ( caracter...)
  -1 +LOOP
  ;

: GIRA_PILA    ( ...TEXTO...--...OTXET...)
  PAD          ( ...TEXTO...,PAD)
  DEPTH2/ 1-   ( ...TEXTO...,PAD,n_car)
  2DUP SWAP    ( ...TEXTO...,PAD,n_car,n_car,PAD)
  C!           ( ...TEXTO...,PAD,n_car)
  OVER         ( ...TEXTO...,PAD,n_car,PAD)
  +            ( ...TEXTO...,dir_texto,dir_final)
  SWAP         ( ...TEXTO...,dir_final,dir_texto)
  1+           ( ...TEXTO...,dir_final,dir_car_inicial)
  SWAP         ( ...TEXTO...,dir_car_inicial,dir_final)
  DO I C!      ( ...TEXT)
  -1 +LOOP
  PAD          ( dir_texto)
  TEXTO->PILA  ( ...OTXET...)
  ;
\ MANEJO DE NÚMEROS DE 32 BITS .................................

: NUMERO       BL WORD NUMBER ;
: NUM          NUMERO DROP DECIMAL ;

\ VARIABLES Y CONSTANTES .......................................

NUMERO 983040 2CONSTANT DIR0_QL

FCB SERIE
SERIE FILENAME SER2C
VARIABLE BYTES_ENVIAR
VARIABLE DIR_I
VARIABLE DIR_F

VARIABLE DIR_ZX
VARIABLE ORG_INICIAL
VARIABLE BYTES_OBJETO

\ BANDERAS .....................................................

: BANDERA CREATE 1 ALLOT ;
BANDERA PASADA
BANDERA LISTADO
BANDERA PRIMER_ORG
: BANDERA! SWAP C! ;
: SI 1 BANDERA! ;
: NO 0 BANDERA! ;

\ FUNCIONES ....................................................

: PASADA0? PASADA C@ 0= ;
: LISTADO? LISTADO C@ ;
: DIR_QL DIR0_QL DIR_ZX @ 0 D+ ;
: 8* 8 * ;

\ PROVOCAR ERRORES .............................................

: !ERROR DUP ?ERROR ;
: ERR_REGI   041 !ERROR ;
: ERR_PIL    040 !ERROR ;
: ERR_REG    038 !ERROR ;
: ERR_ARG    042 !ERROR ;

\ COMPROBAR RANGOS .............................................

: ENTRE? ( n,min,max--n,f)
  2 PICK >= SWAP 2 PICK <= AND ;
: 0-7? 0 7 ENTRE? ;
: BIT?ERR 0-7? NOT 39 ?ERROR ;

\ COMPRUEBA EN LA PASADA 0 .....................................

: COMPRUEBA         ( ...palabras...,...bytes...,nb,np--...p...)
  2DUP +            ( ...pals...,...bytes...,nb,np,nb+np)
  DEPTH2/ 3 - 2DUP  ( .p.,.b.,nb,np,nb+np,n_elem,nb+np,n_elem)
  > 033 ?ERROR      ( .p.,.b.,nb,np,nb+np,n_elem)
  < 034 ?ERROR      ( .p.,.b.,nb,np)
  2DUP              ( .p.,.b.,nb,np,nb,np)
  2 * + DIR_ZX +!   ( .p.,.b.,nb,np)
  >R 0              ( .p.,.b.,nb,0)
  DO                ( .p.,.b.)
    255 > IF ERR_ARG ENDIF   ( .p.,...b)
  LOOP              ( ...p...)
  R> DEPTH2/ 1- - IF 040 ?ERROR ENDIF
  ;

\ IMPRIMIR DIRECCIÓN Y CÓDIGO OBJETO ...........................

: .DIR_ZX
  CR DIR_ZX @
  DUP 0 <# # # # # # #> TYPE SPACE
  HEX 0 <# # # # # #> TYPE SPACE
  DECIMAL
  ;
: .XX
  LISTADO?
  IF
    DUP HEX 0 <# # # #> TYPE DECIMAL
  ENDIF
  ;

\ GUARDA EN LA PASADA 1 ........................................

: G, .XX DIR_QL C!L 1 DIR_ZX +! ;
: G,, DUP 255 AND G, -8 ASHIFT 255 AND G, ;
: GUARDA ( ...palabras...,...bytes...,n_bytes,n_palabras--)
  LISTADO? IF .DIR_ZX ENDIF
  >R      ( ...palabras...,...bytes...,n_bytes)
  DUP     ( ...palabras...,...bytes...,n_bytes,n_bytes)
  IF 0 DO G, LOOP  ( ...palabras...,...bytes)
  ELSE DROP        ( ...palabras)
  ENDIF
  R>               ( ...palabras...,n_palabras)
  DUP              ( ...palabras...,n_palabras,n_palabras)
  IF 0 DO G,, LOOP ( ...palabras)
  ENDIF
  ;

\ OPCODE LISTO PARA GUARDAR ....................................

: OPCODE ( ...palabras...,...bytes...,n_palabras,n_bytes--)
  PASADA0?
  IF
    COMPRUEBA
  ELSE
    GUARDA
  ENDIF
  VACIA_PILA
  ;
: 20O 2 0 OPCODE ; ( ...--...,2,0)
: 21O 2 1 OPCODE ; ( ...--...,2,1)
: 30O 3 0 OPCODE ; ( ...--...,3,0)
: 40O 4 0 OPCODE ; ( ...--...,4,0)

\ NEMÓNICOS TRANSPARENTES ......................................

: OO 1 0 OPCODE ;
: OOXX 20O ;
: JRXX                ( dir,opc)
  PASADA C@
  IF
    SWAP DIR_ZX @ 2+  ( opc,dir,dir_zx+2)
    2+ -              ( opc,dif)
    DUP 127 > 36 ?ERROR
    DUP -128 < 35 ?ERROR
    SWAP              ( desp,opc)
  ENDIF
  OOXX
  ;

: OOXXXX 1 1 OPCODE ;
: CBOO 203 20O ;
: DDOO 221 20O ;
: DDOOXX 221 30O ;
: DDCBXXOO SWAP 203 221 40O ;
: DDOOXXXX 221 21O ;
: FDOO 253 20O ;
: FDOOXX 253 30O ;
: FDCBXXOO SWAP 203 253 40O ;
: FDOOXXXX 253 21O ;
: EDOO 237 20O ;
: EDOOXXXX 237 21O ;

\ ENVÍA ........................................................

: MANDA         ( n_bytes--n_bytes)
  0 BLOCK       ( n_bytes,dir--)
  SERIE CHANNEL ( n_bytes,dir,ch_id_32--)
  WRITE-LEN ABORT" Error en la transmisión."
  ;
: MANDA_LONG
  0 BLOCK           ( dir)
  BYTES_ENVIAR @    ( dir,bytes_enviar)
  2DUP              ( dir,bytes_enviar,dir,bytes_enviar)
  255 AND SWAP      ( dir,bytes_enviar,bytes_enviar_l,dir)
  C!                ( dir,bytes_enviar)
  -8 ASHIFT 255 AND ( dir,bytes_enviar_h)
  SWAP 1+           ( bytes_enviar_h,dir+1)
  C! 2 MANDA DROP
  ;

: LLENA                 ( --bytes_bloque)
  BYTES_ENVIAR @ DUP    ( bytes_enviar,bytes_enviar)
  IF                    ( bytes_enviar)
    4096 2DUP           ( bytes_enviar,4096,bytes_enviar,4096)
    -                   ( bytes_enviar,4096,dif)
    0 > IF              ( bytes_enviar,4096)
          SWAP          ( 4096,bytes_enviar)
        ENDIF
    DROP DUP            ( bytes_bloque,bytes_bloque)
    0 BLOCK SWAP 0      ( b_b,dir,b_b,0)
    DO DIR_QL           ( b_b,dir,dir_32)
       C@L OVER         ( b_b,dir,byte,dir)
       C! 1+            ( b_b,dir+1)
       1 DIR_ZX +! LOOP DROP ( b_b)
  ENDIF ;

: ENVIA 4800 SET-BAUD
  BYTES_OBJETO @ BYTES_ENVIAR !
  FLUSH CR ." Enviando longitud."
  MANDA_LONG ." Enviada longitud." CR
  BEGIN
    LLENA DUP                 ( bytes_bloque,bytes_bloque)
  WHILE                       ( bytes_bloque)
      DUP ." Enviando " . ." bytes." CR     ( bytes_bloque)
      MANDA                                 ( bytes_bloque)
      BYTES_ENVIAR DUP         ( b_b,b_e_dir,b_e_dir)
      @ OVER                   ( b_e_dir,b_e,b_b)
      - SWAP !
  REPEAT ." Transmisión completada." CR 9600 SET-BAUD
  ;

\ ENSAMBLA/COMPILA .............................................

\ : COMPILA ( QUANTUM_Z80) 7 LOAD ; \ obsoleto

: ENSAMBLA
  \ QUANTUM_Z80)
  0 DIR_ZX !
  PASADA NO
  PRIMER_ORG SI
  CR
  ." QUANTUM FORTH Z80 por Marcos Cruz, 1988" CR
  ." Inicio ensamblado " .TIEMPO CR
  COMPILA
  ;

\ DIRECTIVAS TRANSPARENTES .....................................

: IDEFB DEPTH2/ 0 OPCODE ;
: IDEFW DEPTH2/ 0 SWAP OPCODE ;
: " 34 WORD TEXTO->PILA ;

\ COMANDOS DEL ENSAMBLADOR .....................................

: *S BEGIN ?TERMINAL UNTIL ;
: *E CR CR CR ;
: *H *E 34 WORD COUNT TYPE ;
: *L+ LISTADO SI ;
: *L- LISTADO NO ;

\ DIRECTIVAS DE ENSAMBLADOR ....................................

: THE_END
  PASADA0?
  IF
    ." Pasada 0 completa " .TIEMPO CR PASADA SI
    0 DIR_ZX ! COMPILA
  ENDIF
  CR ." Pasada 1 completa " .TIEMPO CR
  DIR_ZX @ DUP DIR_F !
  DECIMAL
  ." Direccion inicial= " DIR_I @ . CR
  ." Direccion final  = " . CR
  CONSOLE FORTH QUIT
  ;

: $ DIR_ZX @ ;
: ORG                   ( dir--)
  PRIMER_ORG C@         ( dir,flag)
  IF                    ( dir)
    DUP DIR_I ! PRIMER_ORG NO
  ENDIF                 ( dir)
  DIR_ZX !
  ;

: DEFB GIRA_PILA IDEFB ;
: DEFW GIRA_PILA IDEFW ;
: DEFM IDEFB ;

\ OPERADORES Y SISTEMAS DE NUMERACIÓN ..........................

: && AND ;
: ||  OR ;
: XX XOR ;
: % BINARY NUM ;
: # HEX NUM ;

\ CONTROL DE ETIQUETAS .........................................

: EQU PASADA0? IF CONSTANT ELSE DROP ENDIF ;
: ? PASADA0? IF BL WORD ENDIF ; ( precede a las etiquetas)
: ] $ EQU ;

\ NEMÓNICOS INÚTILES ...........................................

HEX
: LDL,L 6D OO ;
: LDH,H 65 OO ;
: LDE,E 5B OO ;
: LDD,D 52 OO ;
: LDC,C 49 OO ;
: LDB,B 40 OO ;
: LDA,A 7F OO ;
DECIMAL

\ CONTROL/ARITMÉTICA GENERAL ...................................

: NOP   000 OO ;
: DAA   039 OO ;
: CCF   063 OO ;
: CPL.  047 OO ;
: DI    243 OO ;
: EI    251 OO ;
: HALT  118 OO ;
: IM CASE 0 OF 070 EDOO ENDOF
          1 OF 086 EDOO ENDOF
          2 OF 094 EDOO ENDOF ERR_ARG ENDCASE ;
: NEG   068 EDOO ;
: SCF   055 OO ;

\ ENTRADA/SALIDA ...............................................

: IND           170 EDOO ;
: INI           162 EDOO ;
: INIR          172 EDOO ;
: INDR          186 EDOO ;
: OTDR          187 EDOO ;
: OTIR          179 EDOO ;
: OUTD          171 EDOO ;
: OUTI          163 EDOO ;

: OUT[C]L 105 EDOO ;
: OUT[C]H 097 EDOO ;
: OUT[C]E 089 EDOO ;
: OUT[C]D 081 EDOO ;
: OUT[C]C 073 EDOO ;
: OUT[C]B 065 EDOO ;
: OUT[C]A 121 EDOO ;
: OUT[]A 211 OOXX ;

: INA[L] 104 EDOO ;
: INA[H] 096 EDOO ;
: INA[E] 088 EDOO ;
: INA[D] 080 EDOO ;
: INA[C] 072 EDOO ;
: INA[B] 064 EDOO ;
: INA[A] 120 EDOO ;
: INA[] 219 OOXX ;

\ GIROS ........................................................

: RLA. 023 OO ;
: RLA 023 CBOO ;
: RLB 016 CBOO ;
: RLC 017 CBOO ;
: RLD 018 CBOO ;
: RLE 019 CBOO ;
: RLH 020 CBOO ;
: RLL 021 CBOO ;
: RL[HL] 022 CBOO ;
: RL[IX] 022 DDCBXXOO ;
: RL[IY] 022 FDCBXXOO ;

: RLCA. 007 OO ;
: RLCA 007 CBOO ;
: RLCB 000 CBOO ;
: RLCC 001 CBOO ;
: RLCD 002 CBOO ;
: RLCE 003 CBOO ;
: RLCH 004 CBOO ;
: RLCL 005 CBOO ;
: RLC[HL] 006 CBOO ;
: RLC[IX] 006 DDCBXXOO ;
: RLC[IY] 006 FDCBXXOO ;

: RLD. 111 EDOO ;

: RRA. 031 OO ;
: RRA 031 CBOO ;
: RRB 024 CBOO ;
: RRC 025 CBOO ;
: RRD 026 CBOO ;
: RRE 027 CBOO ;
: RRH 028 CBOO ;
: RRL 029 CBOO ;
: RR[HL] 030 CBOO ;
: RR[IX] 030 DDCBXXOO ;
: RR[IY] 030 FDCBXXOO ;

: RRD. 103 EDOO ;

: RRCA. 015 OO ;
: RRCA 015 CBOO ;
: RRCB 008 CBOO ;
: RRCC 009 CBOO ;
: RRCD 010 CBOO ;
: RRCE 011 CBOO ;
: RRCH 012 CBOO ;
: RRCL 013 CBOO ;
: RRC[HL] 014 CBOO ;
: RRC[IX] 014 DDCBXXOO ;
: RRC[IY] 014 FDCBXXOO ;

\ BIT ..........................................................

HEX

: BITB BIT?ERR 8* 40 + CBOO ;
: BITC BIT?ERR 8* 41 + CBOO ;
: BITD BIT?ERR 8* 42 + CBOO ;
: BITE BIT?ERR 8* 43 + CBOO ;
: BITH BIT?ERR 8* 44 + CBOO ;
: BITL BIT?ERR 8* 45 + CBOO ;
: BIT[HL] BIT?ERR 8* 46 + CBOO ;
: BIT[IX] SWAP BIT?ERR 8* 46 + DDCBXXOO ;
: BIT[IY] SWAP BIT?ERR 8* 46 + FDCBXXOO ;
: BITA BIT?ERR 8* 47 + CBOO ;

\ SET ..........................................................

: SETB BIT?ERR 8* C0 + CBOO ;
: SETC BIT?ERR 8* C1 + CBOO ;
: SETD BIT?ERR 8* C2 + CBOO ;
: SETE BIT?ERR 8* C3 + CBOO ;
: SETH BIT?ERR 8* C4 + CBOO ;
: SETL BIT?ERR 8* C5 + CBOO ;
: SET[HL] BIT?ERR 8* C6 + CBOO ;
: SET[IX] SWAP BIT?ERR 8* C6 + DDCBXXOO ;
: SET[IY] SWAP BIT?ERR 8* C6 + FDCBXXOO ;
: SETA BIT?ERR 8* C7 + CBOO ;

\ RES ..........................................................

: RESB BIT?ERR 8* 80 + CBOO ;
: RESC BIT?ERR 8* 81 + CBOO ;
: RESD BIT?ERR 8* 82 + CBOO ;
: RESE BIT?ERR 8* 83 + CBOO ;
: RESH BIT?ERR 8* 84 + CBOO ;
: RESL BIT?ERR 8* 85 + CBOO ;
: RES[HL] BIT?ERR 8* 86 + CBOO ;
: RES[IX] SWAP BIT?ERR 8* 86 + DDCBXXOO ;
: RES[IY] SWAP BIT?ERR 8* 86 + FDCBXXOO ;
: RESA BIT?ERR 8* 87 + CBOO ;

DECIMAL

\ INTERCAMBIO/BLOQUES ..........................................
: EXDE,HL 235 OO ;
: EXAF 008 OO ; : EXAF,AF EXAF ;
: EXX 217 OO ;
: EX[SP]HL 227 OO ;
: EX[SP]IX 227 DDOO ;
: EX[SP]IY 227 FDOO ;
: LDD.  168 EDOO ;
: LDDR  184 EDOO ;
: LDI   160 EDOO ;
: LDIR  176 EDOO ;
: CPP   169 EDOO ;
: CPDR  185 EDOO ;
: CPI   161 EDOO ;
: CPIR  177 EDOO ;

\ LÓGICAS ......................................................

: XOR 238 OOXX ;
: XORA 175 OO ;
: XORB 168 OO ;
: XORC 169 OO ;
: XORD 170 OO ;
: XORE 171 OO ;
: XORH 172 OO ;
: XORL 173 OO ;
: XOR[HL] 174 ;
: XOR[IX] 174 DDOO ;
: XOR[IY] 174 FDOO ;

: OR 246 OOXX ;
: ORA 183 OO ;
: ORB 176 OO ;
: ORC 177 OO ;
: ORD 178 OO ;
: ORE 179 OO ;
: ORH 180 OO ;
: ORL 181 OO ;
: OR[HL] 182 ;
: OR[IX] 182 DDOO ;
: OR[IY] 182 FDOO ;

: AND 230 OOXX ;
: ANDA 167 OO ;
: ANDB 160 OO ;
: ANDC 161 OO ;
: ANDD 162 OO ;
: ANDE 163 OO ;
: ANDH 164 OO ;
: ANDL 165 OO ;
: AND[HL] 166 ;
: AND[IX] 166 DDOO ;
: AND[IY] 166 FDOO ;

: CP 254 OOXX ;
: CPA 181 OO ;
: CPB 182 OO ;
: CPC 183 OO ;
: CPD 184 OO ;
: CPE 185 OO ;
: CPH 186 OO ;
: CPL 187 OO ;
: CP[HL] 188 ;
: CP[IX] 188 DDOO ;
: CP[IY] 188 FDOO ;

\ RST Y RETORNOS ...............................................

: RST 8 / 0-7? 42 ?ERROR 8* 199 + OO ;

: RETPO 224 OO ;
: RETPE 232 OO ;
: RETP 240 OO ;
: RETM 248 OO ;
: RETI 077 EDOO ;
: RETN 069 EDOO ;
: RETNC 208 OO ;
: RETC 216 OO ;
: RETNZ 192 OO ;
: RETZ 200 OO ;
: RET 201 OO ;

\ SALTOS RELATIVOS .............................................

: JR 024 JRXX ;
: JRC 056 JRXX ;
: JRNC 048 JRXX ;
: JRNZ 032 JRXX ;
: JRZ 040 JRXX ;
: DJNZ 016 JRXX ;

\ SALTOS ABSOLUTOS .............................................

: JP 195 OOXXXX ;
: JPNZ 194 OOXXXX ;
: JPZ 202 OOXXXX ;
: JPNC 210 OOXXXX ;
: JPC 218 OOXXXX ;
: JPPO 226 OOXXXX ;
: JPPE 234 OOXXXX ;
: JPP 242 OOXXXX ;
: JPM 250 OOXXXX ;
: JP[HL] 233 OOXXXX ;
: JP[IX] 233 DDOOXXXX ;
: JP[IY] 233 FDOOXXXX ;

\ LLAMADAS .....................................................

: CALL 205 OOXXXX ;
: CALLNZ 196 OOXXXX ;
: CALLZ 204 OOXXXX ;
: CALLNC 212 OOXXXX ;
: CALLC 220 OOXXXX ;
: CALLPO 228 OOXXXX ;
: CALLPE 236 OOXXXX ;
: CALLP 244 OOXXXX ;
: CALLM 252 OOXXXX ;

\ PUSH/POP ....................................................

: PUSHAF 245 OO ;
: PUSHBC 197 OO ;
: PUSHDE 213 OO ;
: PUSHHL 229 OO ;
: PUSHIX 229 DDOO ;
: PUSHIY 229 FDOO ;

: POPAF 241 OO ;
: POPBC 193 OO ;
: POPDE 209 OO ;
: POPHL 225 OO ;
: POPIX 225 DDOO ;
: POPIY 225 FDOO ;

\ 16 BITS ARITMÉTICA ..........................................

: ADCBC 074 EDOO ;
: ADCDE 090 EDOO ;
: ADCHL 106 EDOO ;
: ADCSP 122 EDOO ;
: SBCBC 066 EDOO ;
: SBCDE 082 EDOO ;
: SBCHL 098 EDOO ;
: SBCSP 114 EDOO ;
: ADDBC 009 OO ;
: ADDDE 025 OO ;
: ADDHL 041 OO ;
: ADDSP 057 OO ;

: ADDIX,BC 009 DDOO ;
: ADDIX,DE 025 DDOO ;
: ADDIX,IX 041 DDOO ;
: ADDIX,SP 057 DDOO ;

: ADDIY,BC 009 FDOO ;
: ADDIY,DE 025 FDOO ;
: ADDIY,IY 041 FDOO ;
: ADDIY,SP 057 FDOO ;

\ 16 BITS INC/DEC ..............................................

: DECBC 011 OO ;
: DECDE 027 OO ;
: DECHL 043 OO ;
: DECSP 059 OO ;
: DECIX 043 DDOO ;
: DECIY 043 FDOO ;

: INCBC 003 OO ;
: INCDE 019 OO ;
: INCHL 035 OO ;
: INCIX 035 DDOO ;
: INCIY 035 FDOO ;

\ 8 BITS ADC ...................................................

: ADC 206 OOXX ;
: ADCA 143 OO ;
: ADCB 136 OO ;
: ADCC 137 OO ;
: ADCD 138 OO ;
: ADCE 139 OO ;
: ADCH 140 OO ;
: ADCL 141 OO ;
: ADC[HL] 142 OO ;
: ADC[IX] 142 DDOOXX ;
: ADC[IY] 142 FDOOXX ;

\ 8 BITS ADD ...................................................

: ADD 198 OOXX ;
: ADDA 135 OO ;
: ADDB 128 OO ;
: ADDC 129 OO ;
: ADDD 130 OO ;
: ADDE 131 OO ;
: ADDH 132 OO ;
: ADDL 133 OO ;
: ADD[HL] 134 OO ;
: ADD[IX] 134 DDOOXX ;
: ADD[IY] 134 FDOOXX ;

\ 8 BITS SBC ...................................................

: SBC 222 OOXX ;
: SBCA 159 OO ;
: SBCB 152 OO ;
: SBCC 153 OO ;
: SBCD 154 OO ;
: SBCE 155 OO ;
: SBCH 156 OO ;
: SBCL 157 OO ;
: SBC[HL] 158 OO ;
: SBC[IX] 158 DDOOXX ;
: SBC[IY] 158 FDOOXX ;

\ 8 BITS SUB ...................................................

: SUB 214 OOXX ;
: SUBA 151 OO ;
: SUBB 144 OO ;
: SUBC 145 OO ;
: SUBD 146 OO ;
: SUBE 147 OO ;
: SUBH 148 OO ;
: SUBL 149 OO ;
: SUB[HL] 150 OO ;
: SUB[IX] 150 DDOOXX ;
: SUB[IY] 150 FDOOXX ;

\ 8 BITS INC ...................................................

: INCA 060 OO ;
: INCB 004 OO ;
: INCC 012 OO ;
: INCD 020 OO ;
: INCE 028 OO ;
: INCH 036 OO ;
: INCL 044 OO ;
: INC[HL] 052 OO ;
: INC[IX] 052 DDOOXX ;
: INC[IY] 052 FDOOXX ;

\ 8 BITS DEC ...................................................

: DECA 061 OO ;
: DECB 005 OO ;
: DECC 013 OO ;
: DECD 021 OO ;
: DECE 029 OO ;
: DECH 037 OO ;
: DECL 045 OO ;
: DEC[HL] 053 OO ;
: DEC[IX] 053 DDOOXX ;
: DEC[IY] 053 FDOOXX ;

\ 16 BITS CARGA ................................................

: LDSP,IX 249 DDOO ;
: LDSP,IY 249 FDOO ;
: LDSP,HL 249 ;
: LD[]BC 067 EDOOXXXX ;
: LD[]DE 083 EDOOXXXX ;
: LD[]HL 099 EDOOXXXX ;
: LD[]SP 115 EDOOXXXX ;
: LD[]IX 034 DDOOXXXX ;
: LD[]IY 034 FDOOXXXX ;

: LDBC[] 075 EDOOXXXX ;
: LDDE[] 091 EDOOXXXX ;
: LDHL[] 107 EDOOXXXX ;
: LDSP[] 123 EDOOXXXX ;
: LDIX[] 042 DDOOXXXX ;
: LDIY[] 042 FDOOXXXX ;

: LDBC 001 OOXXXX ;
: LDDE 017 OOXXXX ;
: LDHL 033 OOXXXX ;
: LDSP 049 OOXXXX ;
: LDIX 033 DDOOXXXX ;
: LDIY 033 FDOOXXXX ;

\ 8 BITS CARGA .................................................

: LDA,I 087 EDOO ;
: LDA,R 095 EDOO ;
: LDI,A 071 EDOO ;
: LDR,A 079 EDOO ;

: LDA 062 OOXX ;
: LDB 006 OOXX ;
: LDC 014 OOXX ;
: LDD 022 OOXX ;
: LDE 030 OOXX ;
: LDH 038 OOXX ;
: LDL 046 OOXX ;

: LDA[HL] 126 OO ;
: LDB[HL] 070 OO ;
: LDC[HL] 078 OO ;
: LDD[HL] 086 OO ;
: LDE[HL] 094 OO ;
: LDH[HL] 102 OO ;
: LDL[HL] 110 OO ;

: LDA[IX] 126 DDOOXX ;
: LDB[IX] 070 DDOOXX ;
: LDC[IX] 078 DDOOXX ;
: LDD[IX] 086 DDOOXX ;
: LDE[IX] 094 DDOOXX ;
: LDH[IX] 102 DDOOXX ;
: LDL[IX] 110 DDOOXX ;

: LDA[IY] 126 FDOOXX ;
: LDB[IY] 070 FDOOXX ;
: LDC[IY] 078 FDOOXX ;
: LDD[IY] 086 FDOOXX ;
: LDE[IY] 094 FDOOXX ;
: LDH[IY] 102 FDOOXX ;
: LDL[IY] 110 FDOOXX ;

: LD[HL]A 119 OO ;
: LD[HL]B 112 OO ;
: LD[HL]C 120 OO ;
: LD[HL]D 128 OO ;
: LD[HL]E 130 OO ;
: LD[HL]H 138 OO ;
: LD[HL]L 146 OO ;

: LD[IX]A 119 FDOOXX ;
: LD[IX]B 112 FDOOXX ;
: LD[IX]C 120 FDOOXX ;
: LD[IX]D 128 FDOOXX ;
: LD[IX]E 130 FDOOXX ;
: LD[IX]H 138 FDOOXX ;
: LD[IX]L 146 FDOOXX ;

: LD[IY]A 119 DDOOXX ;
: LD[IY]B 112 DDOOXX ;
: LD[IY]C 120 DDOOXX ;
: LD[IY]D 128 DDOOXX ;
: LD[IY]E 130 DDOOXX ;
: LD[IY]H 138 DDOOXX ;
: LD[IY]L 146 DDOOXX ;

: LD[HL] 054 OOXX ;
: LD[IX] 054 DDOOXXXX ;
: LD[IY] 054 FDOOXXXX ;
: LDA[BC] 010 OO ;
: LDA[DE] 026 OO ;
: LDA[] 050 OOXXXX ;
: LD[BC]A 002 OO ;
: LD[DE]A 018 OO ;
: LD[]A 048 OOXXXX ;

HEX
: LDA,B 78 OO ;
: LDA,C 79 OO ;
: LDA,D 7A OO ;
: LDA,E 7B OO ;
: LDA,H 7C OO ;
: LDA,L 7D OO ;

: LDB,C 41 OO ;
: LDB,D 42 OO ;
: LDB,E 43 OO ;
: LDB,H 44 OO ;
: LDB,L 45 OO ;
: LDB,A 47 OO ;

: LDC,B 48 OO ;
: LDC,D 4A OO ;
: LDC,E 4B OO ;
: LDC,H 4C OO ;
: LDC,L 4D OO ;
: LDC,A 4F OO ;

: LDD,B 50 OO ;
: LDD,C 51 OO ;
: LDD,E 53 OO ;
: LDD,H 54 OO ;
: LDD,L 55 OO ;
: LDD,A 57 OO ;

: LDE,B 58 OO ;
: LDE,C 59 OO ;
: LDE,D 5A OO ;
: LDE,H 5C OO ;
: LDE,L 5D OO ;
: LDE,A 5F OO ;

: LDH,B 60 OO ;
: LDH,C 61 OO ;
: LDH,D 62 OO ;
: LDH,E 63 OO ;
: LDH,L 66 OO ;
: LDH,A 68 OO ;

: LDL,B 68 OO ;
: LDL,C 69 OO ;
: LDL,D 6A OO ;
: LDL,E 6B OO ;
: LDL,H 6C OO ;
: LDL,A 6F OO ;

DECIMAL FORTH

Descarga

Todas las versiones del programa pueden descargarse desde la sección de descargas de su página principal.