-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPDP8_FileInput.inc
More file actions
78 lines (68 loc) · 1.33 KB
/
PDP8_FileInput.inc
File metadata and controls
78 lines (68 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
TITLE PDP8_FileInput (PDP8_FileInput.inc)
INCLUDE macros.inc
.data
defaultFile BYTE "PDP8_Ram", 0
filenameMessage BYTE "Enter the file name.", 0
filename BYTE 80 DUP(0)
fileHandle HANDLE ?
fileOpenErrorMessage BYTE "Error opening file.", 0
counter WORD 0
fileError BYTE 0
.code
fileEntry PROC uses eax ebx edx
call getFile
xor ebx, ebx
load:
mov bx, counter
mov al, buffer[ebx * TYPE buffer]
call writeToRam
ret
fileEntry ENDP
getFile PROC uses ecx edx
lea edx, defaultFile
jmp open
filenameLoop:
lea edx, filenameMessage
call writeString
call crlf
call crlf
lea edx, prompt
call writeString
lea edx, filename
mov ecx, SIZEOF filename
call readString
open:
call openInputFile
mov fileHandle, eax
call errorCheck
.IF fileError
jmp filenameLoop
.ENDIF
ret
getFile ENDP
errorCheck PROC uses ecx edx
.IF fileHandle == INVALID_HANDLE_VALUE
call fileOpenError
jmp done
.ENDIF
lea edx, buffer
mov ecx, SIZEOF buffer
call readFromFile
jnc checkBufferSize
call fileOpenError
call closeFile
checkBufferSize:
.IF fileHandle < SIZEOF buffer
call fileOpenError
.ENDIF
done:
ret
errorCheck ENDP
fileOpenError PROC uses edx
mov fileError, 1
lea edx, fileOpenErrorMessage
call writeString
call crlf
call crlf
ret
fileOpenError ENDP