Difference between revisions of "AGI/Specifications/Other/AGI256-2/Implementation Details"
(Added info about Nick Sonneveld's IDA databases.) |
(Added AGIOBJS.OVL's disassembly.) |
||
Line 10: | Line 10: | ||
Thanks Nick. You can check out the disassemblies if you're interested at the | Thanks Nick. You can check out the disassemblies if you're interested at the | ||
[http://www.agidev.com/projects/nagi/dev.php AGI Development Site]. | [http://www.agidev.com/projects/nagi/dev.php AGI Development Site]. | ||
==Differences between AGI256 and AGI256-2's files== | |||
The only coded changes are in AGIOBJS.OVL. Data files have more differences though. | |||
===Disassembly of AGIOBJS.OVL showing differences between AGI256 and AGI256-2=== | |||
This disassembly is from AGI256-2's AGIOBJS.OVL. | |||
Comments show what the lines were in AGI256 so you can compare them more easily. | |||
I've used the asterisk character in the comments to designate that the previous | |||
instruction is continued in that position too. | |||
The comments aren't very up to date. So they may be plain wrong sometimes as | |||
I've partially guessed them at the time I wrote them. See the C version of this | |||
subroutine to better understand it. | |||
<pre> | |||
seg000:0000 ; Segment type: Pure code | |||
seg000:0000 seg000 segment byte public 'CODE' use16 | |||
seg000:0000 assume cs:seg000 | |||
seg000:0000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing | |||
seg000:0000 jmp loc_9 | |||
seg000:0003 ; --------------------------------------------------------------------------- | |||
seg000:0003 jmp loc_48 | |||
seg000:0006 ; --------------------------------------------------------------------------- | |||
seg000:0006 jmp loc_85 | |||
seg000:0009 ; --------------------------------------------------------------------------- | |||
seg000:0009 | |||
seg000:0009 loc_9: ; CODE XREF: seg000:0000�j | |||
seg000:0009 push si | |||
seg000:000A push di | |||
seg000:000B push bp | |||
seg000:000C mov bp, sp | |||
seg000:000E sub sp, 2 | |||
seg000:0011 mov bp, [bp+8] | |||
seg000:0014 mov al, [bp+8] | |||
seg000:0017 mov ah, [bp+6] | |||
seg000:001A call near ptr 0B8B6h | |||
seg000:001D mov si, di | |||
seg000:001F mov ah, [bp+0Ch] | |||
seg000:0022 mov al, [bp+0Ah] | |||
seg000:0025 mov di, [bp+0Eh] | |||
seg000:0028 push ds | |||
seg000:0029 mov ds, ds:136Fh | |||
seg000:002D xor dx, dx | |||
seg000:002F mov cx, dx | |||
seg000:0031 jmp loc_155 | |||
seg000:0034 ; --------------------------------------------------------------------------- | |||
seg000:0034 nop | |||
seg000:0035 nop | |||
seg000:0036 | |||
seg000:0036 loc_36: ; CODE XREF: seg000:003E�j | |||
seg000:0036 ; seg000:0175�j | |||
seg000:0036 mov cl, al | |||
seg000:0038 repe movsb | |||
seg000:003A add si, dx | |||
seg000:003C dec ah | |||
seg000:003E jnz loc_36 | |||
seg000:0040 pop ds | |||
seg000:0041 add sp, 2 | |||
seg000:0044 pop bp | |||
seg000:0045 pop di | |||
seg000:0046 pop si | |||
seg000:0047 retn | |||
seg000:0048 ; --------------------------------------------------------------------------- | |||
seg000:0048 | |||
seg000:0048 loc_48: ; CODE XREF: seg000:0003�j | |||
seg000:0048 push si | |||
seg000:0049 push di | |||
seg000:004A push bp | |||
seg000:004B mov bp, sp | |||
seg000:004D sub sp, 2 | |||
seg000:0050 mov bp, [bp+8] | |||
seg000:0053 mov al, [bp+8] | |||
seg000:0056 mov ah, [bp+6] | |||
seg000:0059 call near ptr 0B8B6h | |||
seg000:005C mov si, [bp+0Eh] | |||
seg000:005F mov ah, [bp+0Ch] | |||
seg000:0062 mov al, [bp+0Ah] | |||
seg000:0065 push es | |||
seg000:0066 mov es, ds:136Fh | |||
seg000:006A xor dx, dx | |||
seg000:006C mov cx, dx | |||
seg000:006E jmp loc_161 | |||
seg000:0071 ; --------------------------------------------------------------------------- | |||
seg000:0071 nop | |||
seg000:0072 nop | |||
seg000:0073 | |||
seg000:0073 loc_73: ; CODE XREF: seg000:007B�j | |||
seg000:0073 ; seg000:016E�j | |||
seg000:0073 mov cl, al | |||
seg000:0075 repe movsb | |||
seg000:0077 add di, dx | |||
seg000:0079 dec ah | |||
seg000:007B jnz loc_73 | |||
seg000:007D pop es | |||
seg000:007E add sp, 2 | |||
seg000:0081 pop bp | |||
seg000:0082 pop di | |||
seg000:0083 pop si | |||
seg000:0084 retn | |||
seg000:0085 ; --------------------------------------------------------------------------- | |||
seg000:0085 | |||
seg000:0085 loc_85: ; CODE XREF: seg000:0006�j | |||
seg000:0085 push si | |||
seg000:0086 push di | |||
seg000:0087 push bp | |||
seg000:0088 mov bp, sp | |||
seg000:008A sub sp, 2 | |||
seg000:008D mov bp, [bp+8] | |||
seg000:0090 mov al, [bp+2] | |||
seg000:0093 push ax | |||
seg000:0094 mov si, [bp+10h] | |||
seg000:0097 test byte ptr [si+2], 80h | |||
seg000:009B jmp short loc_A5 ; jz loc_A5 (Was mirror testing, now we ignore mirroring) | |||
seg000:009D ; --------------------------------------------------------------------------- | |||
seg000:009D push bp | |||
seg000:009E nop ; call near ptr 0BACDh (Was _BlitMirrorCell, now not used) | |||
seg000:009F nop ; * | |||
seg000:00A0 nop ; * | |||
seg000:00A1 pop bp ; * | |||
seg000:00A2 mov si, [bp+10h] | |||
seg000:00A5 | |||
seg000:00A5 loc_A5: ; CODE XREF: seg000:009B�j | |||
seg000:00A5 inc si | |||
seg000:00A6 lodsw | |||
seg000:00A7 mov dx, ax | |||
seg000:00A9 mov ah, [bp+3] | |||
seg000:00AC mov al, [bp+5] | |||
seg000:00AF sub al, dl | |||
seg000:00B1 inc al | |||
seg000:00B3 call near ptr 0B8B6h | |||
seg000:00B6 nop ; shl dh, 1 | |||
seg000:00B7 nop ; * | |||
seg000:00B8 nop ; shl dh, 1 | |||
seg000:00B9 nop ; * | |||
seg000:00BA nop ; shl dh, 1 | |||
seg000:00BB nop ; * | |||
seg000:00BC nop ; shl dh, 1 | |||
seg000:00BD nop ; * | |||
seg000:00BD ; (These were probably for putting color info into upper nibble) | |||
seg000:00BE push es | |||
seg000:00BF mov es, ds:136Fh | |||
seg000:00C3 mov bl, 1 | |||
seg000:00C5 mov bh, [bp+24h] | |||
seg000:00C8 shl bh, 1 | |||
seg000:00CA shl bh, 1 | |||
seg000:00CC shl bh, 1 | |||
seg000:00CE shl bh, 1 | |||
seg000:00D0 mov bp, di | |||
seg000:00D2 xor cx, cx | |||
seg000:00D4 jmp short loc_DA | |||
seg000:00D6 ; --------------------------------------------------------------------------- | |||
seg000:00D6 nop | |||
seg000:00D7 | |||
seg000:00D7 loc_D7: ; CODE XREF: seg000:00E6�j | |||
seg000:00D7 cbw | |||
seg000:00D8 add di, ax | |||
seg000:00DA | |||
seg000:00DA loc_DA: ; CODE XREF: seg000:00D4�j | |||
seg000:00DA ; seg000:0108�j ... | |||
seg000:00DA lodsb | |||
seg000:00DB or al, al | |||
seg000:00DD jz loc_10A | |||
seg000:00DF mov ah, al | |||
seg000:00E1 mov al, 1 ; and ax, 0F00Fh | |||
seg000:00E3 nop ; * | |||
seg000:00E3 ; (Was probably for checking run length... now not needed, always 1) | |||
seg000:00E4 cmp ah, dh | |||
seg000:00E6 jz loc_D7 | |||
seg000:00E8 mov cl, 1 ; mov cl, al (Was for run length, now always 1) | |||
seg000:00EA nop ; shr ah, 1 | |||
seg000:00EB nop ; * | |||
seg000:00EC nop ; shr ah, 1 | |||
seg000:00ED nop ; * | |||
seg000:00EE nop ; shr ah, 1 | |||
seg000:00EF nop ; * | |||
seg000:00F0 nop ; shr ah, 1 | |||
seg000:00F1 nop ; * | |||
seg000:00F1 ; (These were probably for getting color info from upper to lower nibble) | |||
seg000:00F2 | |||
seg000:00F2 loc_F2: ; CODE XREF: seg000:0136�j | |||
seg000:00F2 mov al, es:[di] | |||
seg000:00F5 and al, 0F0h | |||
seg000:00F7 cmp al, 20h ; ' ' | |||
seg000:00F9 jbe loc_116 | |||
seg000:00FB cmp al, bh | |||
seg000:00FD ja loc_135 | |||
seg000:00FF mov al, ah ; mov al, bh ?? | |||
seg000:0101 | |||
seg000:0101 loc_101: ; CODE XREF: seg000:0133�j | |||
seg000:0101 mov al, ah ; or al, ah | |||
seg000:0103 jmp loc_178 | |||
seg000:0106 ; --------------------------------------------------------------------------- | |||
seg000:0106 | |||
seg000:0106 loc_106: ; CODE XREF: seg000:0185�j | |||
seg000:0106 nop ; loop loc_F2 | |||
seg000:0107 nop ; * | |||
seg000:0108 jmp short loc_DA | |||
seg000:010A ; --------------------------------------------------------------------------- | |||
seg000:010A | |||
seg000:010A loc_10A: ; CODE XREF: seg000:00DD�j | |||
seg000:010A dec dl | |||
seg000:010C jz loc_13A | |||
seg000:010E add bp, 140h | |||
seg000:0112 mov di, bp | |||
seg000:0114 jmp short loc_DA | |||
seg000:0116 ; --------------------------------------------------------------------------- | |||
seg000:0116 | |||
seg000:0116 loc_116: ; CODE XREF: seg000:00F9�j | |||
seg000:0116 push di | |||
seg000:0117 xor ch, ch | |||
seg000:0119 | |||
seg000:0119 loc_119: ; CODE XREF: seg000:012C�j | |||
seg000:0119 cmp di, 0D0C0h | |||
seg000:011D jnb loc_12E | |||
seg000:011F add di, 140h | |||
seg000:0123 mov ch, es:[di] | |||
seg000:0126 and ch, 0F0h | |||
seg000:0129 cmp ch, 20h ; ' ' | |||
seg000:012C jbe loc_119 | |||
seg000:012E | |||
seg000:012E loc_12E: ; CODE XREF: seg000:011D�j | |||
seg000:012E pop di | |||
seg000:012F cmp ch, bh | |||
seg000:0131 mov ch, 0 | |||
seg000:0133 jbe loc_101 ; or al, ah | |||
seg000:0135 | |||
seg000:0135 loc_135: ; CODE XREF: seg000:00FD�j | |||
seg000:0135 inc di | |||
seg000:0136 loop loc_F2 | |||
seg000:0138 jmp short loc_DA | |||
seg000:013A ; --------------------------------------------------------------------------- | |||
seg000:013A | |||
seg000:013A loc_13A: ; CODE XREF: seg000:010C�j | |||
seg000:013A pop es | |||
seg000:013B pop ax | |||
seg000:013C or al, al | |||
seg000:013E jnz loc_14E | |||
seg000:0140 mov al, 1 | |||
seg000:0142 test bl, bl | |||
seg000:0144 jnz loc_14B | |||
seg000:0146 call near ptr 0D744h | |||
seg000:0149 jmp short loc_14E | |||
seg000:014B ; --------------------------------------------------------------------------- | |||
seg000:014B | |||
seg000:014B loc_14B: ; CODE XREF: seg000:0144�j | |||
seg000:014B call near ptr 0D73Eh | |||
seg000:014E | |||
seg000:014E loc_14E: ; CODE XREF: seg000:013E�j | |||
seg000:014E ; seg000:0149�j | |||
seg000:014E add sp, 2 | |||
seg000:0151 pop bp | |||
seg000:0152 pop di | |||
seg000:0153 pop si | |||
seg000:0154 retn | |||
seg000:0155 ; --------------------------------------------------------------------------- | |||
seg000:0155 | |||
seg000:0155 loc_155: ; CODE XREF: seg000:0031�j | |||
seg000:0155 mov dx, 140h | |||
seg000:0158 push ax | |||
seg000:0159 xor ah, ah | |||
seg000:015B sub dx, ax | |||
seg000:015D pop ax | |||
seg000:015E jmp loc_171 | |||
seg000:0161 ; --------------------------------------------------------------------------- | |||
seg000:0161 | |||
seg000:0161 loc_161: ; CODE XREF: seg000:006E�j | |||
seg000:0161 mov dx, 140h | |||
seg000:0164 push ax | |||
seg000:0165 xor ah, ah | |||
seg000:0167 sub dx, ax | |||
seg000:0169 pop ax | |||
seg000:016A add di, 0A0h ; 'á' | |||
seg000:016E jmp loc_73 | |||
seg000:0171 ; --------------------------------------------------------------------------- | |||
seg000:0171 | |||
seg000:0171 loc_171: ; CODE XREF: seg000:015E�j | |||
seg000:0171 add si, 0A0h ; 'á' | |||
seg000:0175 jmp loc_36 | |||
seg000:0178 ; --------------------------------------------------------------------------- | |||
seg000:0178 | |||
seg000:0178 loc_178: ; CODE XREF: seg000:0103�j | |||
seg000:0178 add di, 0A0h ; 'á' | |||
seg000:017C and al, 0FFh ; and al, 0Fh | |||
seg000:017E stosb | |||
seg000:017F sub di, 0A0h ; 'á' | |||
seg000:0183 xor bl, bl | |||
seg000:0185 jmp loc_106 ; loop loc_F2 | |||
seg000:0185 ; --------------------------------------------------------------------------- | |||
seg000:0188 db 78h dup(0) | |||
seg000:0188 seg000 ends | |||
seg000:0188 | |||
seg000:0188 | |||
seg000:0188 end | |||
</pre> |
Revision as of 23:33, 16 July 2007
As AGI256-2 is an extension to AGI256 all its implementation details apply unless otherwise noted.
Used external info
I used Nick Sonneveld's disassemblies of various PC AGI interpreter versions when trying to figure out AGI256-2. Those IDA databases were highly useful for understanding. Thanks Nick. You can check out the disassemblies if you're interested at the AGI Development Site.
Differences between AGI256 and AGI256-2's files
The only coded changes are in AGIOBJS.OVL. Data files have more differences though.
Disassembly of AGIOBJS.OVL showing differences between AGI256 and AGI256-2
This disassembly is from AGI256-2's AGIOBJS.OVL.
Comments show what the lines were in AGI256 so you can compare them more easily. I've used the asterisk character in the comments to designate that the previous instruction is continued in that position too.
The comments aren't very up to date. So they may be plain wrong sometimes as I've partially guessed them at the time I wrote them. See the C version of this subroutine to better understand it.
seg000:0000 ; Segment type: Pure code seg000:0000 seg000 segment byte public 'CODE' use16 seg000:0000 assume cs:seg000 seg000:0000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing seg000:0000 jmp loc_9 seg000:0003 ; --------------------------------------------------------------------------- seg000:0003 jmp loc_48 seg000:0006 ; --------------------------------------------------------------------------- seg000:0006 jmp loc_85 seg000:0009 ; --------------------------------------------------------------------------- seg000:0009 seg000:0009 loc_9: ; CODE XREF: seg000:0000�j seg000:0009 push si seg000:000A push di seg000:000B push bp seg000:000C mov bp, sp seg000:000E sub sp, 2 seg000:0011 mov bp, [bp+8] seg000:0014 mov al, [bp+8] seg000:0017 mov ah, [bp+6] seg000:001A call near ptr 0B8B6h seg000:001D mov si, di seg000:001F mov ah, [bp+0Ch] seg000:0022 mov al, [bp+0Ah] seg000:0025 mov di, [bp+0Eh] seg000:0028 push ds seg000:0029 mov ds, ds:136Fh seg000:002D xor dx, dx seg000:002F mov cx, dx seg000:0031 jmp loc_155 seg000:0034 ; --------------------------------------------------------------------------- seg000:0034 nop seg000:0035 nop seg000:0036 seg000:0036 loc_36: ; CODE XREF: seg000:003E�j seg000:0036 ; seg000:0175�j seg000:0036 mov cl, al seg000:0038 repe movsb seg000:003A add si, dx seg000:003C dec ah seg000:003E jnz loc_36 seg000:0040 pop ds seg000:0041 add sp, 2 seg000:0044 pop bp seg000:0045 pop di seg000:0046 pop si seg000:0047 retn seg000:0048 ; --------------------------------------------------------------------------- seg000:0048 seg000:0048 loc_48: ; CODE XREF: seg000:0003�j seg000:0048 push si seg000:0049 push di seg000:004A push bp seg000:004B mov bp, sp seg000:004D sub sp, 2 seg000:0050 mov bp, [bp+8] seg000:0053 mov al, [bp+8] seg000:0056 mov ah, [bp+6] seg000:0059 call near ptr 0B8B6h seg000:005C mov si, [bp+0Eh] seg000:005F mov ah, [bp+0Ch] seg000:0062 mov al, [bp+0Ah] seg000:0065 push es seg000:0066 mov es, ds:136Fh seg000:006A xor dx, dx seg000:006C mov cx, dx seg000:006E jmp loc_161 seg000:0071 ; --------------------------------------------------------------------------- seg000:0071 nop seg000:0072 nop seg000:0073 seg000:0073 loc_73: ; CODE XREF: seg000:007B�j seg000:0073 ; seg000:016E�j seg000:0073 mov cl, al seg000:0075 repe movsb seg000:0077 add di, dx seg000:0079 dec ah seg000:007B jnz loc_73 seg000:007D pop es seg000:007E add sp, 2 seg000:0081 pop bp seg000:0082 pop di seg000:0083 pop si seg000:0084 retn seg000:0085 ; --------------------------------------------------------------------------- seg000:0085 seg000:0085 loc_85: ; CODE XREF: seg000:0006�j seg000:0085 push si seg000:0086 push di seg000:0087 push bp seg000:0088 mov bp, sp seg000:008A sub sp, 2 seg000:008D mov bp, [bp+8] seg000:0090 mov al, [bp+2] seg000:0093 push ax seg000:0094 mov si, [bp+10h] seg000:0097 test byte ptr [si+2], 80h seg000:009B jmp short loc_A5 ; jz loc_A5 (Was mirror testing, now we ignore mirroring) seg000:009D ; --------------------------------------------------------------------------- seg000:009D push bp seg000:009E nop ; call near ptr 0BACDh (Was _BlitMirrorCell, now not used) seg000:009F nop ; * seg000:00A0 nop ; * seg000:00A1 pop bp ; * seg000:00A2 mov si, [bp+10h] seg000:00A5 seg000:00A5 loc_A5: ; CODE XREF: seg000:009B�j seg000:00A5 inc si seg000:00A6 lodsw seg000:00A7 mov dx, ax seg000:00A9 mov ah, [bp+3] seg000:00AC mov al, [bp+5] seg000:00AF sub al, dl seg000:00B1 inc al seg000:00B3 call near ptr 0B8B6h seg000:00B6 nop ; shl dh, 1 seg000:00B7 nop ; * seg000:00B8 nop ; shl dh, 1 seg000:00B9 nop ; * seg000:00BA nop ; shl dh, 1 seg000:00BB nop ; * seg000:00BC nop ; shl dh, 1 seg000:00BD nop ; * seg000:00BD ; (These were probably for putting color info into upper nibble) seg000:00BE push es seg000:00BF mov es, ds:136Fh seg000:00C3 mov bl, 1 seg000:00C5 mov bh, [bp+24h] seg000:00C8 shl bh, 1 seg000:00CA shl bh, 1 seg000:00CC shl bh, 1 seg000:00CE shl bh, 1 seg000:00D0 mov bp, di seg000:00D2 xor cx, cx seg000:00D4 jmp short loc_DA seg000:00D6 ; --------------------------------------------------------------------------- seg000:00D6 nop seg000:00D7 seg000:00D7 loc_D7: ; CODE XREF: seg000:00E6�j seg000:00D7 cbw seg000:00D8 add di, ax seg000:00DA seg000:00DA loc_DA: ; CODE XREF: seg000:00D4�j seg000:00DA ; seg000:0108�j ... seg000:00DA lodsb seg000:00DB or al, al seg000:00DD jz loc_10A seg000:00DF mov ah, al seg000:00E1 mov al, 1 ; and ax, 0F00Fh seg000:00E3 nop ; * seg000:00E3 ; (Was probably for checking run length... now not needed, always 1) seg000:00E4 cmp ah, dh seg000:00E6 jz loc_D7 seg000:00E8 mov cl, 1 ; mov cl, al (Was for run length, now always 1) seg000:00EA nop ; shr ah, 1 seg000:00EB nop ; * seg000:00EC nop ; shr ah, 1 seg000:00ED nop ; * seg000:00EE nop ; shr ah, 1 seg000:00EF nop ; * seg000:00F0 nop ; shr ah, 1 seg000:00F1 nop ; * seg000:00F1 ; (These were probably for getting color info from upper to lower nibble) seg000:00F2 seg000:00F2 loc_F2: ; CODE XREF: seg000:0136�j seg000:00F2 mov al, es:[di] seg000:00F5 and al, 0F0h seg000:00F7 cmp al, 20h ; ' ' seg000:00F9 jbe loc_116 seg000:00FB cmp al, bh seg000:00FD ja loc_135 seg000:00FF mov al, ah ; mov al, bh ?? seg000:0101 seg000:0101 loc_101: ; CODE XREF: seg000:0133�j seg000:0101 mov al, ah ; or al, ah seg000:0103 jmp loc_178 seg000:0106 ; --------------------------------------------------------------------------- seg000:0106 seg000:0106 loc_106: ; CODE XREF: seg000:0185�j seg000:0106 nop ; loop loc_F2 seg000:0107 nop ; * seg000:0108 jmp short loc_DA seg000:010A ; --------------------------------------------------------------------------- seg000:010A seg000:010A loc_10A: ; CODE XREF: seg000:00DD�j seg000:010A dec dl seg000:010C jz loc_13A seg000:010E add bp, 140h seg000:0112 mov di, bp seg000:0114 jmp short loc_DA seg000:0116 ; --------------------------------------------------------------------------- seg000:0116 seg000:0116 loc_116: ; CODE XREF: seg000:00F9�j seg000:0116 push di seg000:0117 xor ch, ch seg000:0119 seg000:0119 loc_119: ; CODE XREF: seg000:012C�j seg000:0119 cmp di, 0D0C0h seg000:011D jnb loc_12E seg000:011F add di, 140h seg000:0123 mov ch, es:[di] seg000:0126 and ch, 0F0h seg000:0129 cmp ch, 20h ; ' ' seg000:012C jbe loc_119 seg000:012E seg000:012E loc_12E: ; CODE XREF: seg000:011D�j seg000:012E pop di seg000:012F cmp ch, bh seg000:0131 mov ch, 0 seg000:0133 jbe loc_101 ; or al, ah seg000:0135 seg000:0135 loc_135: ; CODE XREF: seg000:00FD�j seg000:0135 inc di seg000:0136 loop loc_F2 seg000:0138 jmp short loc_DA seg000:013A ; --------------------------------------------------------------------------- seg000:013A seg000:013A loc_13A: ; CODE XREF: seg000:010C�j seg000:013A pop es seg000:013B pop ax seg000:013C or al, al seg000:013E jnz loc_14E seg000:0140 mov al, 1 seg000:0142 test bl, bl seg000:0144 jnz loc_14B seg000:0146 call near ptr 0D744h seg000:0149 jmp short loc_14E seg000:014B ; --------------------------------------------------------------------------- seg000:014B seg000:014B loc_14B: ; CODE XREF: seg000:0144�j seg000:014B call near ptr 0D73Eh seg000:014E seg000:014E loc_14E: ; CODE XREF: seg000:013E�j seg000:014E ; seg000:0149�j seg000:014E add sp, 2 seg000:0151 pop bp seg000:0152 pop di seg000:0153 pop si seg000:0154 retn seg000:0155 ; --------------------------------------------------------------------------- seg000:0155 seg000:0155 loc_155: ; CODE XREF: seg000:0031�j seg000:0155 mov dx, 140h seg000:0158 push ax seg000:0159 xor ah, ah seg000:015B sub dx, ax seg000:015D pop ax seg000:015E jmp loc_171 seg000:0161 ; --------------------------------------------------------------------------- seg000:0161 seg000:0161 loc_161: ; CODE XREF: seg000:006E�j seg000:0161 mov dx, 140h seg000:0164 push ax seg000:0165 xor ah, ah seg000:0167 sub dx, ax seg000:0169 pop ax seg000:016A add di, 0A0h ; 'á' seg000:016E jmp loc_73 seg000:0171 ; --------------------------------------------------------------------------- seg000:0171 seg000:0171 loc_171: ; CODE XREF: seg000:015E�j seg000:0171 add si, 0A0h ; 'á' seg000:0175 jmp loc_36 seg000:0178 ; --------------------------------------------------------------------------- seg000:0178 seg000:0178 loc_178: ; CODE XREF: seg000:0103�j seg000:0178 add di, 0A0h ; 'á' seg000:017C and al, 0FFh ; and al, 0Fh seg000:017E stosb seg000:017F sub di, 0A0h ; 'á' seg000:0183 xor bl, bl seg000:0185 jmp loc_106 ; loop loc_F2 seg000:0185 ; --------------------------------------------------------------------------- seg000:0188 db 78h dup(0) seg000:0188 seg000 ends seg000:0188 seg000:0188 seg000:0188 end