stup8CPU rev: 0.002. by Kindergarten
2 of 2 files
kindergarten
- 1998 February
- Kindergarten
3 items
- STUP8.ASM
- STUP8.COM
- STUP8CPU.PRJ
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------ ; project: stup8cpu ; code: anormal/loki/kindergarten/trkitzr ; ; rev: 0.000 : Sun 02-08-1998 : initial code, not debug ; rev: 0.001 : Sun 02-15-1998 : some fixes, some debugging ; rev: 0.002 : Sun 02-22-1998 : +debugging ; i was getting a stupid error due to the use of si without initializating ; time: 0.000 : 1:30 ; time: 0.001 : 1:10 ; time: 0.002 : 2:10 c0de segment assume cs:c0de,ds:c0de org 100h .486 ; opcode macronization :) _inc_idx macro db 0 endm _load macro db 1 endm _mov_idx macro idx_inm db 2 or (idx_inm shl 3) endm _sub_acc macro idx_inm db 3 or (idx_inm shl 3) endm _stop macro db 4 endm _output macro db 5 endm _input macro db 6 endm _jnz macro idx_inm db 7 or (idx_inm shl 3) endm start: mov bx,offset ram mov si,offset ram+32d ;initial ip run: lodsb ;load opcode mov di,ax and di,0111b ;get instruction shl di,1 call [di+offset optable] endemul: jmp run db 0bfh movidx: shr al,3 xlat mov idx,al ret db 0bah load: mov al,idx xlat mov acc,al ret db 0eah subacc: shr al,3 xlat sub acc,al ret db 0bah incidx: inc idx ret db 0cdh output: mov dl,acc mov ah,02 int 21h ret acc db 0 input: mov dx,offset buffer mov ah,0ah int 21h mov al,idx sub ah,ah mov di,ax add di,bx xchg ax,si mov si,offset buffer+2 xor cx,cx mov cl,[buffer+1] rep movsb xchg ax,si ret idx db 0 jnzlabel: cmp acc,0 jne jump ret db 0b2h jump: sub ah,ah shr al,3 xlat mov si,ax add si,bx ret db 0b8h stop: pop ax ret buffer db 20h,0 db 20h dup (0) db 0eah optable dw incidx,load,movidx,subacc,stop,output,input,jnzlabel ;ram!!! ;vector of pointers to real inmediates ram db iniMess-ram ;0 db imprime-ram ;1 let_o db 'o' ;2 db pass-ram ;3 db badtry-ram ;4 let_u db 'u' ;5 db okMess-ram ;6 db badMess-ram ;7 let_l db 'l' ;8 db imprime2-ram ;9 let_r db 'r' ;10 let_p db 'p' ;11 db 32-12 dup(0) _mov_idx 0 imprime: _load _sub_acc 10 ;decode message _inc_idx _output _jnz 1 ;must be 'r' terminated _mov_idx 3 _input _load _sub_acc 8 _jnz 4 _inc_idx _load _sub_acc 5 _jnz 4 _inc_idx _load _sub_acc 11 _jnz 4 _inc_idx _load _sub_acc 5 _jnz 4 _inc_idx _load _sub_acc 8 _jnz 4 _inc_idx _load _sub_acc 2 _jnz 4 _inc_idx _mov_idx 6 imprime2: _load _inc_idx _sub_acc 8 _output _jnz 9 _stop badtry: _mov_idx 7 _jnz 9 pass: db 23,93,83,25,73,83,91 ;just some trash iniMess: db 0ah + 'r' db 0dh + 'r' db 's' + 'r' db 't' + 'r' db 'u' + 'r' db 'p' + 'r' db '8' + 'r' db 'C' + 'r' db 'P' + 'r' db 'U' + 'r' db ' ' + 'r' db 'b' + 'r' db 'y' + 'r' db ' ' + 'r' db 'a' + 'r' db 'n' + 'r' db 'o' + 'r' db 'r' + 'r' db 'm' + 'r' db 'a' + 'r' db 'l' + 'r' db '/' + 'r' db 'k' + 'r' db 'i' + 'r' db 'd' + 'r' db 'e' + 'r' db 'r' + 'r' db 'g' + 'r' db 'a' + 'r' db 'r' + 'r' db 't' + 'r' db 'e' + 'r' db 'n' + 'r' db ' ' + 'r' db '-' + 'r' db ' ' + 'r' db 'f' + 'r' db 'e' + 'r' db 'b' + 'r' db '-' + 'r' db '9' + 'r' db '8' + 'r' db 0ah + 'r' db 0dh + 'r' db 'E' + 'r' db 'n' + 'r' db 't' + 'r' db 'e' + 'r' db 'r' + 'r' db ' ' + 'r' db 'p' + 'r' db 'a' + 'r' db 's' + 'r' db 's' + 'r' db 'w' + 'r' db 'o' + 'r' db 'r' + 'r' db 'd' + 'r' db ':' + 'r' db ' ' + 'r' db 'r' ;terminator okMess: db 0ah + 'l' db 0dh + 'l' db 'n' + 'l' db 'i' + 'l' db 'c' + 'l' db 'e' + 'l' db '!' + 'l' db '!' + 'l' db '!' + 'l' db '!' + 'l' db ',' + 'l' db ' ' + 'l' db 'e' + 'l' db 'm' + 'l' db 'a' + 'l' db 'i' + 'l' db 'l' + 'l' db ' ' + 'l' db 'm' + 'l' db 'e' + 'l' db ' ' + 'l' db 'n' + 'l' db 'o' + 'l' db 'w' + 'l' db '!' + 'l' db '!' + 'l' db ' ' + 'l' db 't' + 'l' db 'o' + 'l' db ' ' + 'l' db 'a' + 'l' db 'n' + 'l' db 'o' + 'l' db 'r' + 'l' db 'm' + 'l' db 'a' + 'l' db 'l' + 'l' db '@' + 'l' db 'b' + 'l' db 'i' + 'l' db 'g' + 'l' db 'f' + 'l' db 'o' + 'l' db 'o' + 'l' db 't' + 'l' db '.' + 'l' db 'c' + 'l' db 'o' + 'l' db 'm' + 'l' db 0ah + 'l' db 0dh + 'l' db 'l' ;terminator badMess: db 0ah + 'l' db 0dh + 'l' db 'w' + 'l' db 'r' + 'l' db 'o' + 'l' db 'n' + 'l' db 'g' + 'l' db '!' + 'l' db ',' + 'l' db ' ' + 'l' db 't' + 'l' db 'r' + 'l' db 'y' + 'l' db ' ' + 'l' db 'a' + 'l' db 'g' + 'l' db 'a' + 'l' db 'i' + 'l' db 'n' + 'l' db ' ' + 'l' db 'm' + 'l' db 'a' + 'l' db 'n' + 'l' db '!' + 'l' db '.' + 'l' db '.' + 'l' db '.' + 'l' db 0ah + 'l' db 0dh + 'l' db 'l' ;terminator c0de ends end start