i was thinking to do this:
Code: Select all
// 2000h:0h = the program
void run_prg(void)
{
prepare_segments();
asm {
jmp 2000h:0h //this gives me an error : "Expression syntax". The syntax is wrong but why?
}
}
Code: Select all
// 2000h:0h = the program
void run_prg(void)
{
prepare_segments();
asm {
jmp 2000h:0h //this gives me an error : "Expression syntax". The syntax is wrong but why?
}
}
Code: Select all
label kam; (this is a expression from pascal but it should exist something in c++ alike)
jmp dword ptr cs:kam
jmp get_away
kam:
dw 2000h
dw 0
get_away:
Code: Select all
push 2000h
push 0
retf
Code: Select all
push cs
push return_here (or push offset return_here)
push 2000h
push 0
retf
return_here:
...
Code: Select all
#include <screen.h>
#include <keyboa~1.h>
#include <disk.h>
#include <screen.h>
#include <keyboa~1.h>
#include <disk.h>
void main(void)
{
unsigned char file[10];
unsigned char resu;
for (; ; )
{
put_str("? ");
get_str(9, file);
put_str("\n\r");
load_dir();
resu = get_addr(file);
if (resu == 1)
{
load_prg();
asm jmp 2000h:0h
put_str("\n\r");
}
}
}
Code: Select all
#include <string.h>
struct file
{
unsigned char name[10];
unsigned char size;
unsigned char sector;
unsigned char track;
unsigned char head;
};
struct file direntries[37];
unsigned char size;
unsigned char sector;
unsigned char track;
unsigned char head;
void load_dir(void)
{
asm {
mov ah, 2h
mov al, 1
lea bx, direntries
mov cl, 1
mov ch, 0
mov dl, 0
mov dh, 0
int 13h
}
}
unsigned char get_addr(unsigned char *file)
{
unsigned char curr;
unsigned char resu;
for (curr = 0; curr < 14; curr++)
{
resu = strcmp(direntries[curr].name, file);
if (resu == 0)
{
size = direntries[curr].size;
sector = direntries[curr].sector;
track = direntries[curr].track;
head = direntries[curr].head;
return 1;
}
}
return 0;
}
void load_prg(void)
{
asm {
mov ah, 2h
mov al, [size]
mov cl, [sector]
mov ch, [track]
mov dl, 0
mov dh, [head]
push es
mov bx, 2000h
mov es, bx
mov bx, 0h
int 13h
pop es
}
}
Code: Select all
asm jmp 2000h:0h
Code: Select all
asm {
jmp 2000h:0h
}
Code: Select all
asm jmp 2000h:0h
asm {
jmp 2000h:0h
}
jmp 2000h:0
jmp 0x2000:0
jmp 0x2000:0x0