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