home *** CD-ROM | disk | FTP | other *** search
-
- ;This is the only 8088 assembly code required by the
- ; emulator
-
- ; version to be assembled by TASM or MASM
- ; will set bp = cpmstack, ds = cpmseg, and try
- ; to access by BRKEM #baseint
- ; for this to work, #baseint must have been already installed
- ; to point to 8080 code
- ; the interrupt pointer determines the cs of the 8080 code
- ; we calculate the ds = cs, since there are no overides
- ; in emulation mode, and most 8080 code implicitly assumes
- ; cs = ds
- ; could redo bdos code to bankswitch the variables used,
- ; but why bother
-
-
- ; procedure gotocpm(cpmseg,cpmstack,baseint : word);
- ;begin
- ; contains a kludge to get variable interrupt call
- ; or BRKEM call
- ; have to rewrite byte after the opcode
- ; on machines with a cache, could be a problem
-
- code segment word public
- assume cs:code
- public gotocpm
- gotocpm proc near
- push bp ;
- mov bp,sp ; standard set up code, no local variables
- mov ax,[bp + 4] ; brkem int # patch
- mov byte ptr cs:hack,al ; modify code
- mov ax,[bp + 8] ; using near call, so last param at bp + 2
- mov dx,[bp +6] ; cpmstack to dx
- push bp ; used by V20 as stack pointer
- push ds ; set equal to CP/M data=code
- mov ds,ax ; [cpm80] set data segment for cpm
- mov bp, dx ; cpmstack to set cp/m stack
- db 0fh,0ffh ; BRKEM
- hack: db 000h; ; BRKEM XX uses XX interrupt
- ; overwritten in this version
- pop ds
- pop bp
- mov sp,bp ; standard exit code
- pop bp
- ret 6 ; 3 two byte parameters pushed on stack
- gotocpm endp
-
- code ends
- end