stup8CPU rev: 0.002 by Kindergarten
1 of 2 files
anormal
-
This download is an executable MS-DOS program that will not run on a modern computer.
It needs a DOS emulator such as DOSBox-X, Staging;
or a virtualized MS-DOS or FreeDOS system.
Browsers may flag this download as unwanted or malicious. If unsure, scan it with VirusTotal. -
Last modified Nov 5, 2017 10:19:33 PM
MD5 checksum 7a48ec096a15754a99d104858cacb180
Mime type Zip archive data
Download STUP8.ZIP
Size 3 kB
1998 February
- Zip - DOS / Computer tool
- Anormal, program credits
3 items in the archive
- 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