-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdoscall.txt
3175 lines (2418 loc) · 106 KB
/
doscall.txt
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
- DOS CALL MANUAL -
==============================================================================
・DOS call list
$ff00 _EXIT Program end
$ff01 _GETCHAR Keyboard input (with echo)
$ff02 _PUTCHAR Character display
$ff03 _COMINP RS-232C line 1 byte input
$ff04 _COMOUT RS-232C line 1 byte output
$ff05 _PRNOUT Printer 1 character output
$ff06 _INPOUT Character input / output
$ff07 _INKEY Keyboard one character input (no break check)
$ff08 _GETC Keyboard one character input (with break check)
$ff09 _PRINT String indication
$ff0a _GETS Character string input (with break check)
$ff0b _KEYSNS Key input state check
$ff0c _KFLUSH Keyboard input after buffer flush
$ff0d _FFLUSH Disk reset
$ff0e _CHGDRV Current drive setting
$ff0f _DRVCTRL Drive status check / setting
$ff10 _CONSNS Screen output inspection
$ff11 _PRNSNS Printer output inspection
$ff12 _CINSNS RS-232C line input inspection
$ff13 _COUTSNS RS-232C line output inspection
$ff17 _FATCHK File connection state inspection
$ff18 _HENDSP Kanji conversion line control
$ff19 _CURDRV Current drive acquisition
$ff1a _GETSS Character string input (no break check)
$ff1b _FGETC File 1 byte input
$ff1c _FGETS File string input
$ff1d _FPUTC 1 character file output
$ff1e _FPUTS File character string output
$ff1f _ALLCLOSE Close all files
$ff20 _SUPER Supervisor / user mode setting
$ff21 _FNCKEY Redefinable key acquisition / setting
$ff22 _KNJCTRL Function call for kana-to-kanji conversion
$ff23 _CONCTRL Console control / direct output
$ff24 _KEYCTRL Console state check / direct input
$ff25 _INTVCS Vector processing address setting
$ff26 _PSPSET Create process management pointer
$ff27 _GETTIM2 Time acquisition (long word)
$ff28 _SETTIM2 Time setting (long word)
$ff29 _NAMESTS File name expansion
$ff2a _GETDATE Date acquisition
$ff2b _SETDATE Date setting
$ff2c _GETTIME Time acquisition
$ff2d _SETTIME Time setting
$ff2e _VERIFY Verify flag setting
$ff2f _DUP0 File handle forced copy
$ff30 _VERNUM OS version acquisition
$ff31 _KEEPPR End resident
$ff32 _GETDPB Drive parameter block copy
$ff33 _BREAKCK Break check setting
$ff34 _DRVXCHG Drive replacement
$ff35 _INTVCG Vectored address acquisition
$ff36 _DSKFRE Disk remaining amount acquisition
$ff37 _NAMECK File name expansion
$ff39 _MKDIR Create subdirectory
$ff3a _RMDIR Remove subdirectory
$ff3b _CHDIR Change current directory
$ff3c _CREATE File creation
$ff3d _OPEN File open
$ff3e _CLOSE File close
$ff3f _READ File input
$ff40 _WRITE File output
$ff41 _DELETE Delete file
$ff42 _SEEK Move file pointer
$ff43 _CHMOD File attribute acquisition / setting
$ff44 _IOCTRL Device driver ioctrl Direct I/O
$ff45 _DUP File handle copy
$ff46 _DUP2 File handle forced copy
$ff47 _CURDIR Acquire the current directory
$ff48 _MALLOC Memory allocation
$ff49 _MFREE Memory block release
$ff4a _SETBLOCK Memory block change
$ff4b _EXEC Program Load / Execute
$ff4c _EXIT2 End code specification end
$ff4d _WAIT Process end code acquisition
$ff4e _FILES File search
$ff4f _NFILES File Next Search
$ff80 _SETPDB Management process change
$ff81 _GETPDB Process information acquisition
$ff82 _SETENV Environment variable setting
$ff83 _GETENV Acquisition of environmental variables
$ff84 _VERIFYG Acquisition of verify flag
$ff85 _COMMON common area control
$ff86 _RENAME File name change / move
$ff87 _FILEDATE File change date acquisition / setting
$ff88 _MALLOC2 Memory allocation
$ff8a _MAKETMP Create temporary file
$ff8b _NEWFILE File creation
$ff8c _LOCK File lock
$ff8f _ASSIGN Virtual drive / directory assignment acquired / set / canceled
$ffaa _FFLUSH_SET Setting of FFLUSH mode
$ffab _OS_PATCH OS internal processing switching (system specific call)
$ffac _GETFCB FCB Pointer Acquisition
$ffad _S_MALLOC Secure memory block under main memory management
$ffae _S_MFREE Memory block under main memory management released
$ffaf _S_PROCESS Sub memory management setting
$fff0 _EXITVC (Program execution end address)
$fff1 _CTRLVC (CTRL + C execution address at abort)
$fff2 _ERRJVC (Execution address at error abort)
$fff3 _DISKRED Block device direct input
$fff4 _DISKWRT Block device direct output
$fff5 _INDOSFLG OS work pointer acquisition
$fff6 _SUPER_JSR Subroutine call
$fff7 _BUS_ERR Bus error occurrence inspection
$fff8 _OPEN_PR Create background task
$fff9 _KILL_PR Self process removal
$fffa _GET_PR Acquisition of thread management information
$fffb _SUSPEND_PR Thread forced sleep
$fffc _SLEEP_PR Sleep
$fffd _SEND_PR Thread command / data transmission
$fffe _TIME_PR Timer counter value acquisition
$ffff _CHANGE_PR Abandonment of execution rights
note Calls placed in $ff50 to $ff7f in Human 68k version 2 were moved to
$ff80 to $ffaf in verion 3 and later.
Processing address of calls of $fff5 to $fff7, $fffa~$fffe can not be
changed (ignored). $fff8, $ffff is executed after the original
processing is normally completed. $fff9 is called each time one thread
is deleted.
==============================================================================
・Error code list
$ffffffff -1 I executed an invalid function code
$fffffffe -2 The specified file can not be found.
$fffffffd -3 The specified directory can not be found.
$fffffffc -4 Too many open files
$fffffffb -5 Directory and volume label can not be accessed
$fffffffa -6 The specified handle is not opened
$fffffff9 -7 Memory management area was destroyed
$fffffff8 -8 There is no memory required for execution
$fffffff7 -9 Invalid memory management pointer specified
$fffffff6 -10 I specified an illegal environment
$fffffff5 -11 Execution file format is abnormal
$fffffff4 -12 Open access mode is abnormal
$fffffff3 -13 Invalid file name specification
$fffffff2 -14 Called with invalid parameters
$fffffff1 -15 Invalid drive specification
$fffffff0 -16 The current directory can not be deleted
$ffffffef -17 Devices that can not be ioctrl
$ffffffee -18 No more files found
$ffffffed -19 Specified file can not be written
$ffffffec -20 The specified directory is already registered
$ffffffeb -21 I can not delete it because I have a file
$ffffffea -22 I can not rename because there is a file
$ffffffe9 -23 Disk full and file can not be created
$ffffffe8 -24 The directory is full and I can not create a file
$ffffffe7 -25 You can not seek to the specified position
$ffffffe6 -26 I designated the supervisor mode again in the supervisor state
$ffffffe5 -27 The same thread name exists
$ffffffe4 -28 When the interprocess communication buffer is in a write-protected state
$ffffffe3 -29 I can not start any more background processes
$ffffffe0 -32 Lock space is insufficient
$ffffffdf -33 It is locked and can not be accessed
$ffffffde -34 The specified drive has a handler open
$ffffffdd -35 Symbolic link nesting exceeded 16 times (lndrv)
$ffffffb0 -80 File exists
==============================================================================
$ff00 _EXIT End of program
Exit the program. The opened filehandle is closed and all the memory blocks in use are released.
The end code is 0.
==============================================================================
$ff01 _GETCHAR Wait for keyboard input (with echo)
Ret Key code
Waits for key input and outputs the input key code to standard output.
It examines whether the entered key is ^C (return to parent process), ^P
(to output the subsequent standard output to the printer), ^N (to stop the
^P state).
==============================================================================
$ff02 _PUTCHAR Display of specified character code
Arg CODE.w Single-byte character code
Ret always 0
Outputs the character code specified by CODE to standard output.
It checks whether the key entered during display is ^C, ^S, ^P, ^N.
move CODE,-(sp)
DOS _PUTCHAR
addq.l #2,sp
==============================================================================
$ff03 _COMINP 1 byte input from RS-232C line
Ret 1 byte entered
Enter 1 byte from the RS-232C line (with break check).
==============================================================================
$ff04 _COMOUT 1 byte output to RS-232C line
Arg CODE.w 1 byte code
Output 1 byte code specified by CODE to RS-232C line (with break check).
move CODE,-(sp)
DOS _COMOUT
addq.l #2,sp
==============================================================================
$ff05 _PRNOUT プリンタへ 1 文字出力
Arg CODE.w 1 バイト文字コード
CODE で指定した 1 文字をプリンタへ出力する(ブレークチェックあり).
CODE の上位バイトは 0 でなければならないので、漢字は上位・下位の順で 1
バイトずつ出力する.
move CODE,-(sp)
DOS _PRNOUT
addq.l #2,sp
==============================================================================
$ff06 _INPOUT キーの入出力
Arg CODE.w 1 バイト文字コード
Ret CODE = $ff,$fe
入力されたキーコード(d0.l = 0 なら入力なし)
CODE = その他
d0.l = 0
CODE の値が $ff であればキー入力を行うが、キーが入力されていなければす
ぐに終了する. $fe であればキーの先読み入力を行うが、キーが入力されてい
てもそのキーはそのままバッファに残る. CODE がその他の値であれば文字コ
ードとみなして表示する.
move CODE,-(sp)
DOS _INPOUT
addq.l #2,sp
==============================================================================
$ff07 _INKEY キーボードから 1 文字入力(ブレークチェックなし)
Ret キーコード
キーが押されるまで待ち、そのキーコードを返す.
==============================================================================
$ff08 _GETC One character input from the keyboard (with break check)
Ret Key code
Wait until the key is pressed and return the key code. Look for ^C, ^P, ^N.
==============================================================================
$ff09 _PRINT Display string
Arg MESPTR.l String pointer
Ret Always 0
Display the character string specified by MESPTR. ^C、^S、^P、^N について調べる.
pea (MESPTR)
DOS _PRINT
addq,l #4,sp
==============================================================================
$ff0a _GETS Input of character string
Arg BUFFER.l Input buffer pointer
Ret Number of input characters
BUFFER で指定した入力バッファに、改行までの入力文字列を書き込む.
改行文字はヌル文字に置き換えられる. ^C、^P、^N について調べる.
最大入力文字数を超えた場合は、警告を出すが終了はしない.
入力バッファの内容は以下の通りで、最大入力文字数を設定してから呼び出す.
同一バッファで続けて実行する場合、前回の実行時に得られた入力文字数をク
リアしなければテンプレート機能が使用できる.
offset size
0 1.b 最大入力文字数 : n
1 1.b 実際に入力された文字数
2 n+1.b 入力文字列
pea (BUFFER)
DOS _GETS
addq.l #4,sp
==============================================================================
$ff0b _KEYSNS Checking the key input status
Ret Input status (0: no input, -1: with input)
Examine the key input status. Examine ^C, ^P, ^N.
==============================================================================
$ff0c _KFLUSH Input from keyboard after buffer flush
Arg MODE.w mode
CODE.w Code to select the process
BUFFER.l Input buffer pointer
Ret MODE = 1,7,8
Entered key code
MODE = 6
CODE = $fe,$ff
Entered key code (0 is not entered)
CODE = Other
d0.l = 0
MODE = 10
Number of characters to enter
Empty the key input buffer and then input from the keyboard.
The value of MODE corresponds to the lower 1 byte of the DOS call and
has the following behavior.
MODE = 1
Wait for key input and output the input code to standard output.
MODE = 6
CODE = $ff Examine keystrokes (don't wait if there is no input).
CODE = $fe Enter the key look-ahead.
CODE = Other Output to standard output.
MODE = 7
Wait for keystrokes (no break check).
MODE = 8
Wait for key input (with break check).
MODE = 10
Write the character string entered before the line break to the buffer.
MODE = 1,7,8
move MODE,-(sp)
DOS _KFLUSH
adddq.l #2,sp
MODE = 6
move CODE,-(sp)
move MODE,-(sp)
DOS _KFLUSH
adddq.l #4,sp
MODE = 10
pea (BUFFER)
move MODE,-(sp)
DOS _KFLUSH
adddq.l #6,sp
==============================================================================
$ff0d _FFLUSH Resetting the disk
Ret always 0
Initialize the contents of the disk buffer and the line input buffer from
standard input. Do not close the file. Do nothing if fflush = off.
==============================================================================
$ff0e _CHGDRV Setting of the current drive
Arg DRIVE.w Drive number (0: A 1: B ... 25: Z)
Ret Number of drives that can be specified (1 to 26)
Change the current drive. Ret is the specified skill.
move DRIVE,-(sp)
DOS _CHGDRV
addq.l #2,sp
==============================================================================
$ff0f _DRVCTRL Drive status check / setting
Arg MODE.w (MD.b×256+DRIVE.b)
MB.b mode
DRIVE.b Drive number (0: Current 1: A 2: B ... 26: Z)
P1.l Arg 1
P2.l Arg 2
…
Pn.l Arg n
Ret MD = 0
Specified drive status
bit 7 LED flashing
bit 6 Eject prohibition
bit 5 バッファあり
bit 4 ユーザーによるイジェクト禁止
bit 3 PRO(プロテクト = 1)
bit 2 RDY(ノットレディ = 1)
bit 1 メディア挿入
bit 0 誤挿入
注: PRO と RDY はメディアが挿入されていた場合のみ返す.
モード MD の値に従って、ドライブ番号 DRIVE で指定したドライブの状態を
検査/設定する.
MODE の上位 8bit にモード MD、下位 8bit にドライブ番号 DRIVE を指定す
る.
MD = 0 状態検査.
MD = 1 排出(オープン中のファイルがあるとエラー).
MD = 2 排出禁止(MD = 1 の排出も禁止).
MD = 3 排出許可(オープンされているドライブはクローズされず、
バッファは自動的に消去される).
MD = 4 ディスク未挿入時に LED 点滅.
MD = 5〜8 使用禁止.
MD = 9 カレントディレクトリをルートにして検索 FAT を先頭に戻
す(オープンされているファイルがあるとエラー).
MD = 10 検索 FAT を先頭に戻す.
MD = 11〜15 予約.
MD = 16〜 特殊ブロックデバイスに対して使用する(任意のArgが追加
可能).
MD = 0〜4,9,10
move MODE,-(sp)
DOS _DRVCTRL
addq.l #2,sp
MD = 16〜
move.l Pn,-(sp)
…
move.l P1,-(sp)
move MODE,-(sp)
DOS _DRVCTRL
lea (n*4+2,sp),sp
==============================================================================
$ff10 _CONSNS 画面出力ができるかの検査
Ret 出力状態(0:出力不可、0 以外:出力可能)
画面に出力可能か調べる.
==============================================================================
$ff11 _PRNSNS Check whether printer output is possible
Ret Output status (0: not possible、non-zero: output possible)
Check whether output to the printer is possible.
==============================================================================
$ff12 _CINSNS RS-232C 回線から入力ができるかの検査
Ret 入力状態(0:入力不可、0 以外:入力可能)
RS-232C 回線から入力可能か調べる.
==============================================================================
$ff13 _COUTSNS RS-232C 回線へ出力ができるかの検査
Ret 出力状態(0:出力不可、0 以外:出力可能)
RS-232C 回線に出力可能か調べる.
==============================================================================
$ff17 _FATCHK ドライブのセクタが連続しているかの検査
Arg FILE.l ファイル名のポインタ
BUFFER.l バッファのポインタ
LEN.w バッファのバイト数
Ret バッファの使用バイト数(負数ならError code)
d0.l = 8 連続([1]でコールした場合)
d0.l = 14 連続([2]でコールした場合)
FILE で指定したファイルのドライブ番号とセクタの連結状態をバッファに書
き込む. この DOS コールで FAT が連続していることを調べるとともに、
DISKRED でデータ部を直接読むことが可能.
この DOS コールは、バッファのアドレス BUFFER をスタックに積む時
[1] そのまま積む
[2] BUFFER+$80000000 を積む
の二通りのコール方法があり、[1]の場合はバッファに書き込まれるセクタ番
号とセクタ数のサイズがワードであるが、[2]ではロングワードになる.
[2]の場合バッファのバイト数 LEN がArgに必要なので注意すること.
バッファに書き込まれる情報は以下の通り.
[1]
offset size
0 1.w ドライブ番号 : d(1:A 2:B … 26:Z)
2 1.w 先頭セクタ番号 : s1
4 1.w セクタ数 : n1
6 1.w 次のセクタ番号 : s2
8 1.w セクタ数 : n2
…
? 1.w 終わり : 0
[2]
offset size
0 1.w ドライブ番号 : d(1:A 2:B … 26:Z)
2 1.l 先頭セクタ番号 : s1
6 1.l セクタ数 : n1
10 1.l 次のセクタ番号 : s2
14 1.l セクタ数 : n2
…
? 1.l 終わり : 0
[1]
pea (BUFFER)
pea (FILE)
DOS _FATCHK
addq.l #8,sp
[2]
move LEN,-(sp)
pea (BUFFER+$80000000)
pea (FILE)
DOS _FATCHK
lea (10,sp),sp
==============================================================================
$ff18 _HENDSP 漢字変換行の制御
Arg MD.w コントロールモード
POS.w ポジション(変換ウィンドウの先頭からの位置)
MESPTR.l 変換文字列のポインタ
Ret MD = 0,4,8
ウィンドウの最大文字数
MD = 1,2,5,6,7,10
次のポジション
モード MD の値に従って漢字変換行を制御する.
この DOS コールは漢字変換を扱うプログラムに使用するが、日本語 FP から
利用するので一般のアプリケーションは使用禁止.
MD = 0
モード表示ウィンドウをオープンする.
MD = 1
指定位置から文字列をノーマルで表示する.
MD = 2
指定位置から文字列をリバースで表示する.
MD = 3
モード表示ウィンドウをクローズする.
MD = 4
入力ウィンドウをオープンする.
MD = 5
指定位置から文字列をノーマルで表示する.
MD = 6
指定位置から文字列をリバースで表示する.
MD = 7
指定のポジション以降を元に戻す.
MD = 8
侯補ウィンドウをオープンする.
MD = 9
指定位置から文字列をノーマルで表示する.
MD = 10
指定位置から文字列をリバースで表示する.
MD = 11
侯補ウィンドウをクローズする.
MD = 0,3,4,8,11
move MD,-(sp)
DOS _HENDSP
addq.l #2,sp
MD = 7
move POS,-(sp)
move MD,-(sp)
DOS _HENDSP
addq.l #4,sp
MD = 1,2,5,6,9,10
pea (MESPTR)
move POS,-(sp)
move MD,-(sp)
DOS _HENDSP
addq.l #8,sp
==============================================================================
$ff19 _CURDRV Get the current drive
Ret Current drive number(0:A 1:B … 25:Z)
Check the value of the current drive.
==============================================================================
$ff1a _GETSS 文字列の入力
Arg BUFFER.l 入力バッファのポインタ
Ret 入力文字数
BUFFER で指定した入力バッファに、改行までの入力文字列を書き込む.
改行文字は、ヌル文字に置き換えられる.
ブレークチェックはしない(VOID/NEWLINE で改行しない).
最大入力文字数を超えた場合は、警告を出すが終了はしない.
入力バッファの内容は以下の通り.
offset size
0 1.b 最大入力文字数 : n
1 1.b (実際に入力された文字数)
2 n+1.b 入力文字列
pea (BUFFER)
DOS _GETSS
addq.l #4,sp
==============================================================================
$ff1b _FGETC 1 byte input from the file handle
Arg FILENO.w File handle
Ret Input 1 byte code
Wait until there is input from the file handle specified by FILENO, and return the code if there is input.
==============================================================================
$ff1c _FGETS ファイルハンドルから文字列入力
Arg BUFFER.l 入力バッファのポインタ
FILENO.w ファイルハンドル
Ret 入力文字数
FILENO で指定したファイルハンドルから改行までの文字列を入力し、BUFFER
で指定した入力バッファに書き込む. 改行文字はヌル文字に置き換えられる.
ブレークチェックはしない(VOID/NEWLINE で改行しない).
最大入力文字数を超えた場合は、最大入力文字数まで入れて終了する.
入力バッファの内容は以下の通り.
offset size
0 1.b 最大入力文字数 : n
1 1.b (実際に入力された文字数)
2 n+1.b 入力文字列
move FILENO,-(sp)
pea (BUFFER)
DOS _FGETS
addq.l #6,sp
==============================================================================
$ff1d _FPUTC ファイルハンドルに 1 バイト出力
Arg CODE.w 1 バイトコード
FILENO.w ファイルハンドル
CODE で指定した 1 バイトコードを、FILENO で指定したファイルハンドルに
出力する.
move FILENO,-(sp)
move CODE,-(sp)
DOS _FPUTC
addq.l #4,sp
==============================================================================
$ff1e _FPUTS Write string to file handle
Arg MESPTR.l String pointer
FILENO.w File handle
MESPTR で指定した文字列を、FILENO で指定したファイルハンドルに出力する.
文字列の末尾のヌル文字は出力しない.
move FILENO,-(sp)
pea (MESPTR)
DOS _FPUTS
addq.l #6,sp
==============================================================================
$ff1f _ALLCLOSE 全ファイルのクローズ
オープンしたファイルを全てクローズする.
==============================================================================
$ff20 _SUPER Switch between supervisor and user mode
Arg STACK.l Switching mode (0 or address set to SSP)
Ret STACK = 0
Previous SSP value (Error code if negative)
Switch mode Switches between supervisor / user mode according to the value of STACK.
STACK = 0
Set the USP value to SSP and switch to supervisor mode.
STACK = Other
Set STACK to SSP and switch to user mode.
pea (STACK)
DOS _SUPER
addq.l #4,sp
==============================================================================
$ff21 _FNCKEY 再定義可能なキーの読み出し/設定
Arg MODE.w モード及びキー番号(MD.b×256+FNO.b)
BUFFER.l データバッファのポインタ
Ret d0.l = 0 正常終了
-1 キー番号が異常
モード MD の値によって、再定義可能なキーの収得/設定をする.
この DOS コールは、CON デバイス(コンソール)でサポートされる.
MODE の上位 8bit にモード MD、下位 8bit にキー番号 FNO を指定する.
MD = 0 収得
MD = 1 設定(同時にファンクションキーの表示も行なうが、32 行モードの時
は表示しない)
FNO キー名
0 全てのキー
1〜10 F01〜F10
11〜20 SHIFT+F01〜F10
21 ROLL UP
22 ROLL DOWN
23 INS
24 DEL
25 UP(↑)
26 LEFT(←)
27 RIGHT(→)
28 DOWN(↓)
29 CLR
30 HELP
31 HOME
32 UNDO
BUFFER は収得/設定のためのバッファで、大きさは FNO の値によって異なる.
FNO = 0 712 バイト(32×20+6×12 バイト)
FNO = 1〜20 32 バイト(31 バイト+$00)
FNO = 21〜32 6 バイト( 5 バイト+$00)
pea (BUFFER)
move MODE,-(sp)
DOS _FNCKEY
addq.l #6,sp
==============================================================================
$ff22 _KNJCTRL 仮名漢字変換用ファンクションコールの呼び出し
この DOS コールは、日本語 FP のファンクションコールで使用する.
==============================================================================
$ff23 _CONCTRL Console control / direct output
Arg MD.w Control mode (args are different depending on this value)
CODE.w 1 byte code
MESPTR.l String pointer
ATR.w Text attribute
X.w Cursor position
Y.w Cursor position
N.w Specify cursor relative movement
MOD.w Screen control designation
YS.w Scroll range specification
YL.w Scroll range specification
Ret MD = 0〜1
Cursor position
d0.hw Column
d0.w Row
MD = 2
変更前の文字属性(-1 ならエラー)
MD = 3
変更前のカーソル位置(-1 ならエラー)
d0.hw 桁位置
d0.w 行〃
MD = 4〜5、7〜9、12〜13
常に 0
MD = 6
d0.l = 0 正常終了
d0.l = -1 エラー(移動できない)
MD = 10、17〜18
不定
MD = 11
d0.l = 0 正常終了
d0.l = -1 エラー(モードが不正若しくはカーソル位置が不正)
ROM IOCS version 1.3 未満で後者の原因でエラー
になった場合、-1 以外の負数になることがある.
MD = 14、16
変更前のモード
MD = 15
d0.l = 0 正常終了
d0.l = -1 エラー(範囲指定が不正)
コントロールコード MD の値に従って、コンソールから直接入力/制御を行う.
この DOS コールは CON デバイスでサポートされる.
MD = 0
Display 1 byte code specified by CODE (IOCS _B_PUTC).
MD = 1
Display the character string specified by MESPTR (IOCS _B_PRINT).
MD = 2
ATR で指定した文字属性を設定する(IOCS _B_COLOR). ATR = -1 の時
は現在の文字属性を収得する.
MD = 3
カーソルを X、Y で指定した位置に設定する(IOCS _B_LOCATE). X =
-1 の時は現在のカーソル位置を収得する.
MD = 4
カーソルを 1 行下に移動する. 最下行でスクロールアップする
(IOCS _B_DOWN_S).
MD = 5
カーソルを 1 行上に移動する. 先頭行でスクロールダウンする
(IOCS _B_UP_S).
MD = 6
カーソルを N 行上に移動する. 移動できない時はエラーになる
(IOCS _B_UP).
MD = 7
カーソルを N 行下に移動する. 移動できない時は最下行まで移動す
る(IOCS _B_DOWN).
MD = 8
カーソルを N 桁右に移動する. 移動できない時は右端まで移動する
(IOCS _B_RIGHT).
MD = 9
カーソルを N 桁左に移動する. 移動できない時は左端まで移動する
(IOCS _B_LEFT).
MD = 10
モード MOD の値に従って、画面を消去する(IOCS _B_CLR_ST).
MOD = 0 カーソル位置から最終行右端まで
MOD = 1 先頭行左端からカーソル位置まで
MOD = 2 画面全体(カーソルは先頭行左端に移動する)
MD = 11
モード MOD の値に従って、現在行を消去する(IOCS _ERA_ST).
MOD = 0 カーソル位置から行の右端まで
MOD = 1 行の左端からカーソル位置まで
MOD = 2 カーソル行全体
MD = 12
カーソル行に N 行挿入する(IOCS _B_INS).
MD = 13
カーソル行から N 行削除する(IOCS _B_DEL).
MD = 14
モード MOD の値に従って、ファンクションキー行のモードを設定し、
前のモードを返す. スクロール範囲はリセットされる.
MOD = 0 ファンクションキーを表示(スクロール範囲は 0 か
ら 31 行分)
MOD = 1 シフトファンクションキーを表示(同上)
MOD = 2 何も表示しない(同上)
MOD = 3 何も表示しない(スクロール範囲は 0 から 32 行分)
MOD = -1 現在のモードを調べる
MD = 15
YS、YL でスクロール範囲を設定する.
スクロール後、カーソルは先頭行左端に移動する.
YS+YL の値は、ファンクションキー行のモードが 3 の時は 32 まで、
それ以外は 31 までの範囲で指定する.
絶対座標の (0,YS) が 論理座標の (0,0) となる.
MD = 16
モード MOD に従って画面モードを設定し、前のモードを返す.
IOCS _TGUSEMD でグラフィック画面を使用中に設定していても、MOD
= 1、3〜5 がエラーにならずに画面モードを変更してしまうので注意
すること.
MOD 表示画面 グラフィック
0 768×512 なし
1 768×512 16 色
2 512×512 なし
3 512×512 16 色
4 512×512 256 色
5 512×512 65536 色
-1 現在のモードを調べる.
MD = 17
カーソルを表示するモードにする(IOCS _OS_CURON).
MD = 18
カーソルを表示しないモードにする(IOCS _OS_CUROF).
MD = 6〜9、12〜13 で N = 0 を指定した場合は N = 1 として扱われる.
MD = 0
move CODE,-(sp)
move MD,-(sp)
DOS _CONCTRL
addq.l #4,sp
MD = 1
pea (MESPTR)
move MD,-(sp)
DOS _CONCTRL
addq.l #6,sp
MD = 2
move ATR,-(sp)
move MD,-(sp)
DOS _CONCTRL
addq.l #4,sp
MD = 3
move Y,-(sp)
move X,-(sp)
move MD,-(sp)
DOS _CONCTRL
addq.l #6,sp
MD = 4,5,17,18
move MD,-(sp)
DOS _CONCTRL
addq.l #2,sp
MD = 6〜9,12〜13
move N,-(sp)
move MD,-(sp)
DOS _CONCTRL
addq.l #4,sp
MD = 10,11,14,16
move MOD,-(sp)
move MD,-(sp)
DOS _CONCTRL
addq.l #4,sp
MD = 15
move YL,-(sp)
move YS,-(sp)
move MD,-(sp)
DOS _CONCTRL
addq.l #6,sp
==============================================================================
$ff24 _KEYCTRL コンソールの状態検査/直接入力
Arg MD.w コントロールモード(この値によってArgが異なる)
GROUP.w キーコードグループ
INSMODE.w INS キーのモード(-1:ON 0:OFF)
Ret MD = 0、1
入力されたキーコード
MD = 2
シフトキーの状態(ビット 10〜4 は 1 の時 LED 点灯、ビット 3〜0
は 1 の時キーが押されている)
bit 10 全角
bit 9 ひらがな
bit 8 INS
bit 7 CAPS
bit 6 コード入力
bit 5 ローマ字
bit 4 かな
bit 3 OPT.2
bit 2 OPT.1
bit 1 CTRL
bit 0 SHIFT
MD = 3
キーの状態
MD = 4
常に 0
コントロールコード MD の値に従って、直接コンソールから入力/状態検査を
行う.
この DOS コールは CON デバイスでサポートされる.
MD = 0
キーを入力する.
MD = 1
キーコードを先読みする.
MD = 2
シフトキーの状態を調べる.
MD = 3
GROUP で指定したキーコードグループのキー状態を調べる.
MD = 4
INS キーを ON/OFF する.
MD = 0〜2
move MD,-(sp)
DOS _KEYCTRL