RunCPM 上の Turbo Pascal で L チカをやっています。
https://www.youtube.com/watch?v=KP5ZWX4kEgI
Turbo Pascal には L チカするような機能はないのにどうなっているのかと言うと、
・RunCPM の BDOS に GPIO 操作のためのファンクションが追加されている。
・BDOS をコールするための関数は Turbo Pascal に用意されている。
こういう事です。
ARDUINO.INC
{* ARDUINO.INC *}
const INPUT = 0; {ESP32: 1} OUTPUT = 1; {ESP32: 2} INPUT_PULLUP = 2; {ESP32: 5}
LOW = 0; HIGH = 1;
procedure pinMode(pin, mode: Byte); begin Bdos(220, (pin shl 8) + mode); end; {of procedure pinMode}
function digitalRead(pin: Byte): Byte; begin digitalRead := BDos(221, (pin shl 8)); end; {of procedure digitalRead}
procedure digitalWrite(pin, value: Byte); begin BDos(222, (pin shl 8) + value); end; {of procedure digitalWrite}
function analogRead(pin: Byte): Integer; begin analogRead := BDosHL(223, (pin shl 8)); end; {of procedure analogRead}
procedure analogWrite(pin, value: Byte); begin BDos(224, (pin shl 8) + value); end; {of procedure analogWrite}
function hostOS(pin, value: Byte): Integer; begin hostOS := BDosHL(225, (pin shl 8) + value); end; {of procedure hostOS}
GPIO を簡単に操作するためのインクルードファイル (ユニットではない) を用意しておけば、
BLINK.PAS
{* BLINK.PAS *}
{$I ARDUINO.INC} const LED_PIN = 4; begin pinMode(LED_PIN, OUTPUT); repeat digitalWrite(LED_PIN, HIGH); Delay(1000); digitalWrite(LED_PIN, LOW); Delay(1000); until KeyPressed; end.
チョー簡単に L チカプログラムが書けます。
const int LED_PIN = 4;
void setup() { pinMode(LED_PIN, OUTPUT); }
void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); }
Arduino の同等のスケッチはこんな感じです。
|