[Coco] 6309 microproccessor project - 10-18-2003
John Collyer
johncollyer at zoominternet.net
Sat Oct 18 12:22:00 EDT 2003
6309 microprocessor project.
Hello,
The 32-bit 6309.asm enhanced instruction opcodes are coming along nicely. I
came up with a switch option called security. This means that I can include
the powerful but maybe harmful enhanced opcodes, which include special
opcode $11FD and special opcode $11FF. The other two enhanced opcodes have
been moved to their permanent positions in the 6309 interpreter and include;
special opcode $11FC (breakpoint) and special opcode $11FE (exit the
emulator). Because of the security switch, I can let the user of the
emulator decide whether to use these special opcodes or not.
The win32 functions for special opcode $11FD include:
1. CloseHandle
2. CopyFile
3. CreateDirectory
4. CreateFile
5. DeleteFile
6. FindClose
7. FindFirstFile
8. FindNextFile
9. FlushFileBuffers
10. GetCurrentDirectory
11. GetDiskFreeSpace
12. GetFileAttributes
13. GetFileSize
14. GetFileTime
15. GetFullPathName
16. GetLastError
17. GetLongPathName
18. GetShortPathName
19. GetTempFileName
20. GetTempPath
21. OpenFile
22. ReadFile
23. RemoveDirectory
24. SearchPath
25. SetCurrentDirectory
26. SetEndOfFile
27. SetFileAttributes
28. SetFilePointer
29. SetFileTime
30. WriteFile
You interface with these functions by using opcode $11FD followed by a
postbyte of the function call number (1 - 30) and register x pointing to the
parameter block (Register X contains the address of the first parameter of
the parameters needed for the win32 function call).
To set up the parameters look at the win32.api documentation and save any
parameters in memory just as you see in the win32.api definition.
Here is an example:
BeginEx leax MyFile,pcr * the x register has to point to the parameters
jsr Mywin32_4 * create file
stq MyHandle * save file handle
* do something to the file
leax MyHandle,pcr * the x register has to point to the parameters
jsr Mywin32_1 * close the file
testw * If there are no errors
bne noerror *
os9 F$Exit * Else exit with the error
noerror os9 F$Exit * exit with no errors
end BeginEx * done with example
*
* HANDLE CreateFile(
*
* LPCTSTR lpFileName, // pointer to name of the
file
* DWORD dwDesiredAccess, // access (read-write) mode
* DWORD dwShareMode, // share mode
* LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security
attributes
* DWORD dwCreationDistribution, // how to create
* DWORD dwFlagsAndAttributes, // file attributes
* HANDLE hTemplateFile // handle to file with attributes to
copy
* );
*
*
Mywin32_4 fcb $11,$FD,$04 *
lpFName fcb "Filename" *
dwDAccess fcb 0,0,0,0 *
dwSMode fcb 0,0,0,0 *
lpSAttr fdb Attrib * pointer to security attributes note: 16-bit
address
dwCreat fcb 0,0,0,0 *
dwFlagA fcb 0,0,0,0 *
hTmpFile fcb 0,0,0,0 *
fcb $39 * return
*
Attrib fcb 0,0,0,0 * 32-bit security attributes
*
* BOOL CloseHandle(
*
* HANDLE hObject // handle to object to close
* );
*
*
Mywin32_1 fcb $11,$FD,$01 *
fcb $39 * return
*
MyHandle fcb 0,0,0,0 * win32 handles are 32 bits
*****************************
The enhanced instruction opcode $11FF will as before let you run code, but
this code will be Intel 32-bit flat assembly code. You return to the
emulator after your finished with the code. The code can be located
anywhere in the emulator's physical memory space, but it must also be in the
emulator's virtual memory space. You do that by writing the page number
into the Memory management registers. All this can be accomplished because
win32 lets you allocate memory designated as read/write/execute.
Again if you are concerned about security you can set a switch not allowing
enhanced opcodes.
More later.
John Collyer
More information about the Coco
mailing list