APSoft was an idea for a software company comprised of Anduin, Perry, and Stu. Once upon a time we endeavored to create an operating system called MaxOS. Beyond a few graphics demos and simple programs, APSoft never released much. APSoft has been home to Perry’s website and email since 1995, welcome to APSoft.com version 2.0!

Below is the code that created the demo you see above. This is a fantastic tool: http://codelobe.com/tools/cp437-converter
.MODEL SMALL
.STACK 200h
.DATA?
Screen db 6000 dup(?)
Color db ?
.DATA
INPUT_STATUS_0 equ 03dah ;Input status 0 register
EnigmaMsg
db 1,1fh
db " ┌─────┐ ┌──────┐ ┌────── "
db " │ │ │ │ │ "
db " ├─────┤ ├──────┘ └──────┐ "
db " │ │ │ │ "
db " │ │ │ │ "
db " │ │ "
db " ┌───────────────────────────┘ "
db " │ ",1,13h
db " (Good Quality Software) "
db " ",1,1eh
db " ═══════════════╤═══════════════════ "
db " ┌─┐┌─┐ ┌───┐ │┌─ ┌─── ┌──┐ ┌── "
db " │ └┘ │ ├───┤ ├┴─┐ ├── ├─┬┘ └──┐ "
db " │ │ │ │ │ │ └─── │ └ │ "
db " ═╧════╧═╧═══╧═╧══╧══════╧═══════╛ ",1,1bh
db " ╔══╗ ╔═══ "
db " ║ ║ ╠══ "
db " ║ ║ ║ "
db " ╚══╝ ",1,10h
db " ",1,19h,"┌═┬═┐ ",1,1dh,"┌──┐ ",1,1ch,"═╕ ╒═ ",1,1eh,"╓──╖ ",1,1ah,"╔═══ "
db " ",1,19h,"│∙│∙│ ",1,1dh,"├──┤ ",1,1ch,"╘╤╛ ",1,1eh,"║ ║ ",1,1ah,"╚═══╗ "
db " ",1,19h,"│ ╧ │ ",1,1dh,"│ │ ",1,1ch,"╒╧╕ ",1,1eh,"║ ║ ",1,1ah," ║ "
db " ",1,19h,"┴ ┴ ",1,1dh,"│ │ ",1,1ch,"═╛ ╘═ ",1,1eh,"╙──╜ ",1,1ah,"════╝ "
db 1,00h," ",1,0fh,"Coders ",1,04h,"of ",1,0ch,"APS ",1,07h
db "are ",1,0fh,"--- ",1,0fh,"Sl",1,0bh,"ac",1,09h,"ke",1,01h,"r ",1,0bh
db " -- ",1,0fh,"Pe",1,0bh,"rr",1,09h,"y ",1,01h,"H. ",1,09h
db "------- ",1,0fh,"Ac",1,0bh,"id ",1,09h,"St",1,01h,"u ",1,01h," -- "
LOCALS
.CODE
WaitVsyncStart macro
LOCAL WaitNotVsync,WaitVsync
mov dx,INPUT_STATUS_0
WaitNotVsync:
in al,dx
test al,08h
jnz WaitNotVsync
WaitVsync:
in al,dx
test al,08h
jz WaitVsync
endm
Enigma PROC
mov ax,@data
mov ds,ax
call Remove_Cursor
call Copy_Stuff
mov bx,40
@@SCROLL_IN:
WaitVsyncStart
call Display_Stuff
dec bx
cmp bx,-1
jne @@SCROLL_IN
call Get_Key
mov bx,0
@@SCROLL_OUT:
WaitVsyncStart
call Display_Stuff
inc bx
cmp bx,41
jne @@SCROLL_OUT
call Restore_Cursor
mov ax,4c00h
int 21h
Enigma ENDP
Get_Key PROC
push ax
xor ax,ax
int 16h
pop ax
ret
Get_Key ENDP
Remove_Cursor PROC
push ax cx
mov ah,01h
mov cx,0200h
int 10h
pop cx ax
ret
Remove_Cursor ENDP
Restore_Cursor PROC
push ax cx
mov ah,01h
mov cx,0607h
int 10h
pop cx ax
ret
Restore_Cursor ENDP
Display_Stuff PROC
push ax bx cx di si es
mov ax,0b800h
mov es,ax
xor di,di
shl bx,1
mov si,offset Screen
add si,bx
xor bx,bx
xor cx,cx
@@COPY_SCREEN:
mov ax,ds:[si+bx]
mov es:[di+bx],ax
add bx,2
cmp bx,160
jne @@COPY_SCREEN
add si,240
add di,160
xor bx,bx
inc cx
cmp cx,25
jne @@COPY_SCREEN
pop es si di cx bx ax
ret
Display_Stuff ENDP
Copy_Stuff PROC
push ax bx cx di si es
mov si,offset Enigma
mov ax,seg Screen
mov es,ax
mov di,offset Screen
mov Color,07h
xor bx,bx
xor cx,cx
@@LOGO_LOOP:
lodsb
cmp al,1
jne @@SAME_COLOR
lodsb
mov Color,al
jmp @@LOGO_LOOP
@@SAME_COLOR:
mov ah,Color
mov es:[di+bx],ax
add bx,2
cmp bx,80
jne @@LOGO_LOOP
add di,240
xor bx,bx
inc cx
cmp cx,25
jne @@LOGO_LOOP
;Put the Screen in the array
mov di,offset Screen
add di,80
mov ax,0b800h
mov es,ax
xor si,si
xor bx,bx
xor cx,cx
@@SCREEN_LOOP:
mov ax,es:[si+bx]
mov ds:[di+bx],ax
add bx,2
cmp bx,160
jne @@SCREEN_LOOP
add di,240
add si,160
xor bx,bx
inc cx
cmp cx,25
jne @@SCREEN_LOOP
pop es si di cx bx ax
ret
Copy_Stuff ENDP
end Enigma